Domain driven design 服务层DTO—大型复杂交互式报表类对象
我有一些会议对象,它们构成了日程安排系统的基础,其中GridView用于显示重要信息。这是为了安排员工参加会议,并让员工查看已安排的内容 我一直在尝试遵循DDD原则,但我很难知道从我的服务层到系统的表示区域应该传递什么。这是因为时间表可能很大,实际上由系统的许多不同元素组成。例如,客户名称、地址、案例信息、组等,所有这些都是会议调度员做出决定所必需的 除此之外,调度器还需要更改此计划中的值,并将其传递回服务层(例如,从下拉列表中分配员工,可能是更改组等)。因此,信息不是真正的“只读”——它需要与之交互。这不仅仅是一份报告 我们当前的方法是从SQL中填充一个扁平的“调度对象”,它是由不同域对象的小部分构造而成的。这是一个相当复杂的查询。在进行更改后,这将被传递回服务层,服务将检索有问题的域对象,并使用来自DTO的信息在域对象上激发业务方法 我的问题是,这是正确的方法吗?继续从SQL生成大型自定义对象,然后从服务层传递到表示层对象,这些对象感觉非常像视图模型 因回答而更新 了解涉及的实体/聚合关系的金额。(这是一个模糊的示例,因此关系是这里的重要内容)Domain driven design 服务层DTO—大型复杂交互式报表类对象,domain-driven-design,service-layer,presentation-layer,Domain Driven Design,Service Layer,Presentation Layer,我有一些会议对象,它们构成了日程安排系统的基础,其中GridView用于显示重要信息。这是为了安排员工参加会议,并让员工查看已安排的内容 我一直在尝试遵循DDD原则,但我很难知道从我的服务层到系统的表示区域应该传递什么。这是因为时间表可能很大,实际上由系统的许多不同元素组成。例如,客户名称、地址、案例信息、组等,所有这些都是会议调度员做出决定所必需的 除此之外,调度器还需要更改此计划中的值,并将其传递回服务层(例如,从下拉列表中分配员工,可能是更改组等)。因此,信息不是真正的“只读”——它需要与
- 客户端位于一个默认组中
- 客户有一个打开的案例,但许多案例已关闭
- 案件有许多会议
- 会议有许多指定的员工
- 会议有很多原因
- 会议可以安排到不同的组
- 员工可以与许多组关联
- 明细表最多可以有200行李>
- DTO来自WCF,所以域模型是在这个服务层之上而不是之下访问的李>
- 服务根据传回的DTO值利用域模型业务调用,存储库处理插入/更新
那么,我想更新一下,是否使用一个查询来填充一个对象,该对象包含上述所有内容,可以作为一个合并的DTO传递?如果没有,你将如何处理?(给出一些对服务层的示例调用,并稍微解释一下您如何构思ORM来获取数据,同时牢记性能)在服务层和下面,我会将每个实体(请参见DDD中的聚合根)根据其事务边界分开处理。也就是说,即使您可以在同一UI视图中更新客户机和案例,最好先以事务方式修改客户机,然后再修改案例。在一个事务中尝试修改的次数越多,与其他用户的冲突就越大 尽管您的计划很大,可以包含很多对象,但服务层应该再次单独处理每个实体(聚合根),然后将它们捆绑到一个新的视图模型中。遗憾的是,在brown field项目中,SQL中可能有很多逻辑,而大量的多表联接可能会使其更难重构为更原子的查询,而这些查询正是需要的。“在数据库中尽你所能”这一老派以数据为中心的观点与DDD的一切都背道而驰 由于DDD是设计思想和模式的集合,而不是一种方法论或体系结构,因此,尝试将当前应用程序转变为以DDD应用程序为中心的设计似乎为时已晚。听起来,您当前的应用程序在以数据为中心的视图中非常根深蒂固 如果当前所有内容都在一个整体块中通过层传递,那么最好保持这种风格,将这些整体块公开给其他团队中希望消费它们的人,以便在他们的新应用程序中使用。您可能能够放置某种视图模型缓存(有点像CQRS中的缓存视图模型元素)
在我个人看来,以数据为中心的标准化数据应用已经有了自己的一天(它们在硬盘空间昂贵的20世纪70年代是有意义的),所有应用都应该朝着更现代的方向发展。事实上,只有当遗留系统跪在地上爬行时,利益相关者才会拿出资金寻找替代方案(通常是在最后一台服务器都塞满RAM之后)。说服他们一次重构一个小部分可能是可能的,也可能是最好的。这个问题涵盖的内容太多了,你最好问一个问题,把内容至少缩减到四分之一。我暂时忘记了DDD和SOA,您上面描述的不是DDD或SOA。您通过web服务(特别是WCF)公开应用程序层的解决方案会带来许多副作用,如果您要走这条路,那么我将设计一个有效的解决方案(至少在过渡期间),并且忘记所有的首字母缩略词。你有没有考虑过建立一个响应性强的网站?这将为您提供一个适用于台式机、手机和平板电脑的解决方案。您好,我们已经有了一个适用于所有设备的网站。十分