如何将服务端的 DDD 与客户端的 MVP 相结合?
How to combine DDD on the server with MVP on the client?
在我们的应用程序中,我们已经开始在服务器上使用域驱动设计,同时将我们的 UI 技术更改为 GWT,其中 MVP 似乎是自然的选择。现在我们想知道如何将这两者结合在一起。特别是:客户端模型应该如何与服务器端域对象连接?
GWT 的优势之一是您使用领域术语来表达用户真正想要做的事情,因此无需像
这样的 CRUD 操作
cook.setFlour(20);
cook.setOil(10);
cook.setJam(100);
...
你只会做
cook.makeCake();
显然,除非您要进行 CRUD UI,否则在 UI 上我们也希望使用非常相似的术语(如果 UI 应该提供一些东西有用,它也应该以领域为中心)。在这种情况下,我想 在 UI 上我们也应该有一个具有富域操作的模型 ,这将反过来触发对服务器的调用,服务器将在内部使用富域服务器上的对象。
所以控制流程应该大致如下所示:
--- user presses a button ---
presenter.handleMakeCakeButton();
this.makeTheUiDisplaySomethingUiSpecific(); // 'this': presenter
model.makeCake();
remoteService.makeCake(this); // 'this': model
--- call to the server ---
service.makeCake(clientSideModel);
cook.makeCake(serverSideModelTranslatedFromAboveClientSideModel); // cook - the domain object on the server side
--- service returns the updated model which is set and displayed on the client side ---
所以我们得到了 2 个丰富的领域模型。我是不是弄错了什么或者上面的概念是否合理?你会建议别的东西吗?这个区有什么好的practices/guidelines?
丰富的域模型不仅仅是在外部公开域操作,它还涉及在内部强制执行域不变量和规则并执行域过程。
这里你没有 2 个富域模型,你在服务器端有一个富域模型,在客户端有一个表示模型。事实证明,表示模型具有以领域概念命名的方法,但系统的每一层都是这种情况,因为无处不在的语言无处不在。
关于客户端方法,您可能想要查看 CQRS 领域中基于任务的 UI 的有趣概念:https://cqrs.wordpress.com/documents/task-based-ui/
在我们的应用程序中,我们已经开始在服务器上使用域驱动设计,同时将我们的 UI 技术更改为 GWT,其中 MVP 似乎是自然的选择。现在我们想知道如何将这两者结合在一起。特别是:客户端模型应该如何与服务器端域对象连接?
GWT 的优势之一是您使用领域术语来表达用户真正想要做的事情,因此无需像
这样的 CRUD 操作cook.setFlour(20);
cook.setOil(10);
cook.setJam(100);
...
你只会做
cook.makeCake();
显然,除非您要进行 CRUD UI,否则在 UI 上我们也希望使用非常相似的术语(如果 UI 应该提供一些东西有用,它也应该以领域为中心)。在这种情况下,我想 在 UI 上我们也应该有一个具有富域操作的模型 ,这将反过来触发对服务器的调用,服务器将在内部使用富域服务器上的对象。
所以控制流程应该大致如下所示:
--- user presses a button ---
presenter.handleMakeCakeButton();
this.makeTheUiDisplaySomethingUiSpecific(); // 'this': presenter
model.makeCake();
remoteService.makeCake(this); // 'this': model
--- call to the server ---
service.makeCake(clientSideModel);
cook.makeCake(serverSideModelTranslatedFromAboveClientSideModel); // cook - the domain object on the server side
--- service returns the updated model which is set and displayed on the client side ---
所以我们得到了 2 个丰富的领域模型。我是不是弄错了什么或者上面的概念是否合理?你会建议别的东西吗?这个区有什么好的practices/guidelines?
丰富的域模型不仅仅是在外部公开域操作,它还涉及在内部强制执行域不变量和规则并执行域过程。
这里你没有 2 个富域模型,你在服务器端有一个富域模型,在客户端有一个表示模型。事实证明,表示模型具有以领域概念命名的方法,但系统的每一层都是这种情况,因为无处不在的语言无处不在。
关于客户端方法,您可能想要查看 CQRS 领域中基于任务的 UI 的有趣概念:https://cqrs.wordpress.com/documents/task-based-ui/