Web services 将富域对象作为服务公开

Web services 将富域对象作为服务公开,web-services,domain-driven-design,mvp,n-tier-architecture,Web Services,Domain Driven Design,Mvp,N Tier Architecture,我一直在想如何向客户机公开我的域对象。无论我使用的是富客户机还是web,我都希望使用MVP和存储库模式 我想弄清楚的是,我将如何公开服务器上的存储库和模型。甚至有可能通过web服务公开具有状态的复杂业务对象,还是我必须使用一种与语言/平台无关的专有技术,如.Net远程处理、EJB、COM+、DCOM等 其他一些限制条件是,我不希望每次想执行操作时都必须从数据库中加载复杂的域对象,或将其传递到整个网络。一些复杂的逻辑可能是,根据用户权限以及对象的状态,屏幕的某些区域可能被禁用或不可见。还需要向用户

我一直在想如何向客户机公开我的域对象。无论我使用的是富客户机还是web,我都希望使用MVP和存储库模式

我想弄清楚的是,我将如何公开服务器上的存储库和模型。甚至有可能通过web服务公开具有状态的复杂业务对象,还是我必须使用一种与语言/平台无关的专有技术,如.Net远程处理、EJB、COM+、DCOM等

其他一些限制条件是,我不希望每次想执行操作时都必须从数据库中加载复杂的域对象,或将其传递到整个网络。一些复杂的逻辑可能是,根据用户权限以及对象的状态,屏幕的某些区域可能被禁用或不可见。还需要向用户显示验证和错误消息信息。我希望能够像在同一台机器上运行一样,从逻辑上调用许多域对象操作


有了网络,你就可以随心所欲了。您不必跨服务边界公开您的对象,因此您可以按照自己的意愿使它们变得丰富。我正在尝试创建一个丰富的N-teir体系结构,当调用模型的客户端位于不同的计算机上时,该体系结构可以正常工作。

您可以通过REST或web服务像其他任何对象一样公开域对象。我认为关键是要理解,您必须在一次调用中公开提供业务价值的服务,而这些服务不一定会以1:1的比例映射到您的存储库。因此,虽然您在服务器上可能期望单个服务调用使用多个存储库并执行各种聚合,但您通过任何类型的web服务公开的内容或多或少都应该是完整的结果。您在服务上公开的操作不应该公开单个存储库,而应该关注提供给定业务价值的有意义的操作


我希望这能有所帮助。

您可以通过REST或web服务像其他对象一样公开域对象。我认为关键是要理解,您必须在一次调用中公开提供业务价值的服务,而这些服务不一定会以1:1的比例映射到您的存储库。因此,虽然您在服务器上可能期望单个服务调用使用多个存储库并执行各种聚合,但您通过任何类型的web服务公开的内容或多或少都应该是完整的结果。您在服务上公开的操作不应该公开单个存储库,而应该关注提供给定业务价值的有意义的操作


我希望这能有所帮助。

您可以使用SOAP格式化程序进行.Net远程处理, 但由此产生的服务可能会很困难 作为一种服务消费,它肯定会非常健谈

如果您希望将域模型作为服务使用,则应将其设计为服务

正如域驱动设计中所述,服务是无状态的,因此它不会直接公开对象。您的服务应该公开提供将作为单个单元执行的有意义的业务操作的方法


通常认为客户端中的模型处于不同的有界上下文,因为它的关注点与服务器上的有点不同。

< P>可以使用SOAP格式来进行.NET远程处理, 但由此产生的服务可能会很困难 作为一种服务消费,它肯定会非常健谈

如果您希望将域模型作为服务使用,则应将其设计为服务

正如域驱动设计中所述,服务是无状态的,因此它不会直接公开对象。您的服务应该公开提供将作为单个单元执行的有意义的业务操作的方法

通常认为客户端中的模型处于不同的有界上下文,因为它的关注点与服务器上的有点不同。

我在想什么 这就是我如何公开我的存储库和 模型,该模型将位于服务器上。是 甚至有可能暴露复杂的 通过 web服务,还是我必须使用 非专利技术 语言/平台不可知论,如.Net 远程处理、EJB、COM+、DCOM等

一个好的领域模型将是高度行为化的,并围绕问题领域进行设计(以及您与领域专家的讨论),因此我反对将其设计为面向远程消费者(就像首先从数据库或GUI设计它是一个坏主意一样)

相反,我会考虑使用REST或消息传递之类的样式,并决定要公开的接口,然后映射到域或从域映射。因此,如果使用REST,您需要设计资源和API(URL、表示等),然后需要从域模型中实现它

如果这变得不自然,那么您总是可以有多个模型,例如,将一个单独的只读表示特定模型映射到同一个数据源(或封装复杂的行为域模型)是我多次使用的方法

其他一些限制是我 我不想继续加载 来自 数据库或将其传递到整个数据库 每次我想做一个电话时都要打电话 操作

请看HTTP中的缓存和支持资源的多个表示,还要看数据访问解决方案中的缓存

验证和错误消息 还需要提供信息 显示给用户。我想成为 能够逻辑地调用我的许多 域对象操作,就好像它是 在同一台机器上运行

您可以将其表示为一个资源,或者更可能查看HTTP状态代码和您希望在这些sit中使用的响应主体