我想知道您是否有人在客户端/服务器应用程序中成功实施了DDD,并希望分享一些经验。
我们目前正在开发Flex中的智能客户端和Java中的后端。在服务器上,我们有一个向客户端公开的服务层,它在一些其他服务方法中提供CRUD操作。据我所知,在DDD中,这些服务应该是存储库,服务应该用于处理不适合存储库的用例。现在,我们在接口后面的客户端上模仿这些服务,并通过IoC容器注入实现(Webservices,RMI等)。
因此出现了一些问题:
总的来说,我认为新一代应用程序随着Flex,Silverlight,JavaFX的发展而增长,我很好奇DDD如何适应这一点。
答案 0 :(得分:2)
所有这一切的关键是一组模式应该只适用于您的应用程序的一部分,而不是整个应用程序。您在域模型中拥有丰富的逻辑并使用存储库作为DDD的一部分进行数据访问这一事实不应以任何方式影响客户端。从概念上讲,我构建的RIA有三层:
客户端使用类似MVC,MVP或MVVM的东西来呈现UI。 Model层最终调用...
我称之为“整合层”。这是客户端和服务器上存在的服务和数据对象的契约,以允许两者协调。通常,UI设计驱动该层,以便(A)仅将客户端需要的数据传递给它,并且(B)数据访问可以是粗粒度的,即“对该组所需的所有状态进行一个方法调用”。 UI。
服务器使用它想要处理的业务逻辑和数据访问。这可能是DDD或者更古老的学校,比如使用DB中的存储过程构建的数据层以及许多“ResultSet”或“DataTable”对象。
关键在于客户端和服务器都是非常不同的动物,它们需要独立变化。为了做到这一点,你需要一个介于两者之间的层,这是UI的需求和服务器上可能需要的事实的公平妥协。
Silverlight / WPF和JavaFX优于Flex +的一大优势在于,您可以在前两个中使用大量逻辑,因为您在应用程序的两侧都有相同的VM。 Flex是最好的UI技术,但缺少服务器组件,可以更有效地共享和重用代码。