在我们的应用程序中,我们已开始在服务器上使用域驱动设计,同时将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个丰富的域模型。我出错了还是上面的概念听起来不错?你会推荐别的吗?该领域的任何良好做法/指导方针?
答案 0 :(得分:3)
富域模型不仅仅是在外部公开域操作,还包括强制执行域不变量和规则以及在内部执行域过程。
这里没有2个富域模型,服务器端有丰富的域模型,客户端有表示模型。事实证明,表示模型具有以域概念命名的方法,但在系统的每一层中都是如此,因为无所不在的语言无处不在。
关于客户端方法,您可能想要查看CQRS领域中基于任务的UI的这个有趣概念:https://www.rabbitmq.com/management.html