我们正在开发基于DDD原则的应用程序。到目前为止,我们遇到了一些问题,我们无法回答,也无法在互联网上找到答案。处理被动删除更新(即归档而不是删除)
我们的应用程序旨在成为多个公司的云应用程序。
其中一个要求是数据库中没有物理删除。通过将实体的Active属性设置为false,我们只做被动删除。这需要选择,插入和删除操作,但我们不知道如何处理更新操作。
更新意味着改变属性的值,但也意味着过去的值被删除,并有很多原因,我们不希望这一点。其中一个主要原因是会计目的。
如果我们将所有更新语句设置为“存档旧值”,然后“创建新值”,我们将拥有大量重复值。例如,公司有分支机构,公司是分支机构的总根。如果我更换公司电话号码,那意味着我必须将旧公司及其所有分支归档,并创建一家全新的公司,并为分支机构提供一个物业。起初这可能是一个好主意,但随着时间的推移,会有很多值会堵塞数据库。电话可能是不相关的财产,但更改地址(如果街道名称已更改,但公司仍处于相同的物理位置)是一个更严重的问题。
目前我们使用的是带有EF CF的ASP.NET MVC库,但其中一个要求是我们可以轻松切换或添加WPF或WCF等其他技术。目前,我们使用Automapper将DTO映射到域实体,反之亦然,而DTO则是视图的主要来源,即。我们没有视图模型。应用程序按照DDD原则进行分层,并且在服务层中进行映射。
另一个需求是我们没有在数据库中创建初始实体,然后填充值,但整个聚合应该作为一个整体来存储。
任何意见或建议表示赞赏。 我们也欢迎需求(因为这是一个内部项目,而不是一个客户)和架构的任何变化,但只有在绝对必要的时候。
谢谢。
为什么技术需要可插拔?挑一个并坚持下去。在确定如何使基础架构可插拔时,您并没有执行DDD。你可以为这一个聚集挑选事件源,而不是其他人,或者你可以处理存储数据的时间模式。取决于你对他们有多舒适,以及它造成多少摩擦(在时间模式的情况下)。 – 2012-03-03 09:53:05