Couchdb 使用视图和更新处理程序是否会导致对文档结构了解太多?

Couchdb 使用视图和更新处理程序是否会导致对文档结构了解太多?,couchdb,Couchdb,我最近与我的团队提出了一些想法,大致如下: 嘿,伙计们,我们在.NET层沙发上做的很多事情已经通过视图和更新处理程序支持了 e、 g: 返回文档时:我们希望返回不带_rev字段的文档,并在响应中包含对其他文档的引用或该文档 插入文档时:我们希望能够提供一个与用户执行get时返回的对象非常相似的对象 更新时:我们希望允许就地更新,或者至少允许它们的幻觉 所有这些对于沙发视图和更新处理程序来说都是微不足道的;但我反对这一点的最大理由是,coach对文档结构的了解太多,这显然会导致维护问题,并且更难替

我最近与我的团队提出了一些想法,大致如下:

嘿,伙计们,我们在.NET层沙发上做的很多事情已经通过视图和更新处理程序支持了

e、 g:

返回文档时:我们希望返回不带_rev字段的文档,并在响应中包含对其他文档的引用或该文档

插入文档时:我们希望能够提供一个与用户执行get时返回的对象非常相似的对象

更新时:我们希望允许就地更新,或者至少允许它们的幻觉

所有这些对于沙发视图和更新处理程序来说都是微不足道的;但我反对这一点的最大理由是,coach对文档结构的了解太多,这显然会导致维护问题,并且更难替换数据访问层

有没有什么最佳实践指南会说“是的,这东西很酷”或者“不”,你永远不想这么做

没错,\u show、\u update和\u list函数对于非人类的东西不是很有用。基本上,您将一半的逻辑放在CouchDB Javascript中,另一半放在客户机中。您必须始终保持服务器端Javascript与客户端同步。您可能无法使用相同的服务器端代码运行不同版本的客户端软件

当_show、_update和_list有用时,有三个例外

如果远程客户端需要某种数据XML、HTML等,那么_show和_list就很好了。 如果您真的需要使用更少的带宽,这些函数可以制定一个特定于应用程序的压缩协议。也就是说,用于就地更新的_update函数只是一种压缩方式,即获取此文档,更新一项,然后存储新文档。 如果您有许多不同的客户端类型,具有不同的语言、不同的版本、不同的bug等,那么您可以从尽可能简单的客户端和尽可能智能的沙发中获益。 没错,_show、_update和_list函数对于非人类的东西不是很有用。基本上,您将一半的逻辑放在CouchDB Javascript中,另一半放在客户机中。您必须始终保持服务器端Javascript与客户端同步。您可能无法使用相同的服务器端代码运行不同版本的客户端软件

当_show、_update和_list有用时,有三个例外

如果远程客户端需要某种数据XML、HTML等,那么_show和_list就很好了。 如果您真的需要使用更少的带宽,这些函数可以制定一个特定于应用程序的压缩协议。也就是说,用于就地更新的_update函数只是一种压缩方式,即获取此文档,更新一项,然后存储新文档。 如果您有许多不同的客户端类型,具有不同的语言、不同的版本、不同的bug等,那么您可以从尽可能简单的客户端和尽可能智能的沙发中获益。
我们的问题更多的是,在我们的系统中的某个时刻,我们希望抽象掉沙发上的细节,如修订id等。我们将实现就地更新,返回带有相关文档或RESTful链接的文档。因此,我们将面临与上述相同的问题;这取决于这个问题应该是在沙发上还是在.NET层上?从数据层进行的任何抽象都将涉及对数据形状的了解,客户也依赖于此。我们的问题更多的是,在系统中的某个时刻,我们希望抽象掉沙发上的细节,如修订id等。我们将实施就地更新,返回带有相关文档或RESTful链接的文档。因此,我们将面临与上述相同的问题;这取决于这个问题应该是在沙发上还是在.NET层上?从数据层进行的任何数量的抽象都将涉及对数据形状的了解,客户机也依赖于此。