【发布时间】:2016-09-29 05:49:43
【问题描述】:
我们的团队有一个基本上是 MIS 的项目。 我们使用的架构是带有 DDD(领域驱动设计)的 CQRS。 我们在持久层中有持久对象,在域层中有域对象,数据传输对象用于携带来自用户的输入信息,以及在特定页面上显示数据的视图对象。
我确实认为这种设计很棒。但是在实施项目的过程中,我们发现了一些问题,让我们很受阻。最恶心的是我们要写很多转换器来实现两个不同层之间的对象转换,比如PO转DO,DO转PO,DTO转DO。这些转换器中有太多的 get 和 set 语句。我们之所以没有使用 BeanUtils 之类的东西,是因为当两个对象中的字段具有不同的类型或名称时,它就不能很好地工作。显然,这些代码违反了开闭原则。每当特定页面发生变化或我们想要更改 DB 中的字段时,这将是一场噩梦。
我想知道它是否真的必须将 DO 和 Po 分开,我们是否可以简化架构和设计以使它们相同,因为在大多数情况下它们只包含相同的字段而几乎没有区别。 我们如何简化设计以避免我们面临的问题并提高我们的生产力并确保软件的可扩展性和稳定性?
【问题讨论】:
-
可能你有贫血的域模型。 en.wikipedia.org/wiki/Anemic_domain_model 无论如何,你不应该按照你的计划去做,因为它会导致领域模型贫乏。 ;-) 据我所知...
-
将持久性对象与域对象分离是最近的趋势,IMO 完全是因为 ORM 在使域实体保持原始状态方面或多或少做得不好。关于映射,另请查看blog.ploeh.dk/2012/02/09/IsLayeringWorththeMapping
-
域对象模型业务约束。持久性对象模拟数据应如何存储在数据库中。非常不同的目的。只有在简单的 CRUD 应用程序中,它们才能相同。
标签: oop domain-driven-design cqrs