0

我一直在努力思考如何将我的域对象公开给客户端。无论我使用的是富客户端还是使用 Web,我都想使用 MVP 和存储库模式。

我想要了解的是如何公开我的存储库和模型,它们将在服务器上。是否可以通过 Web 服务公开具有状态的复杂业务对象,或者我是否必须使用与语言/平台无关的专有技术,如 .Net 远程处理、EJB、COM+、DCOM 等?

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

有了网络,您就可以自由发挥。您不必跨服务边界公开您的对象,因此您可以根据需要使它们变得丰富。我正在尝试创建一个丰富的 N-teir 架构,当调用该模型的客户端在另一台机器上时它可以工作。

4

3 回答 3

2

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

我希望这会有所帮助。

于 2009-02-11T08:54:26.833 回答
2

您可以将 SOAP 格式化程序用于 .Net 远程处理,但生成的服务可能很难作为服务使用,而且它肯定会非常健谈。

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

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

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

于 2009-02-11T09:03:33.363 回答
1

我想要了解的是如何公开我的存储库和模型,它们将在服务器上。是否可以通过 Web 服务公开具有状态的复杂业务对象,或者我是否必须使用与语言/平台无关的专有技术,如 .Net 远程处理、EJB、COM+、DCOM 等?

一个好的领域模型将是高度行为化的,并且围绕问题领域(以及您与领域专家的讨论)进行设计,因此我反对将其设计为暴露给远程消费者(与从数据库中设计它的方式相同)或 GUI 首先是一个坏主意)。

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

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

其他一些限制是我不想每次我想执行操作时都必须从数据库中加载复杂的域对象或通过网络传递它

查看 HTTP 中的缓存并支持资源的多种表示,还要查看数据访问解决方案中的缓存。

验证和错误消息信息也需要显示给用户。我希望能够在逻辑上调用我的许多域对象操作,就好像它在同一台机器上运行一样。

您可以将其表示为资源,或者更可能查看 HTTP 状态代码和您希望在这些情况下使用的响应正文。

于 2009-02-22T18:24:55.237 回答