【发布时间】:2015-04-10 16:48:50
【问题描述】:
我希望在我们的 ASP.NET MVC 应用程序中实现 Onion 架构。我了解将视图模型与域实体分开的必要性,但是我发现自己正在编写冗余代码。存在冗余代码,因为我的视图模型和域实体看起来完全相同,只是我的视图模型具有 [Serializable] 数据注释。我需要这些模型可序列化,因为我使用的是 ASP.NET 会话状态,其中状态服务器需要对象可序列化。
我个人认为域实体不应该是可序列化的,因为它会依赖于特定的技术。但是,如何避免冗余代码?
我应该补充一点,我的服务方法依赖于这些可序列化的数据模型。
【问题讨论】:
-
您始终可以考虑通过工厂模式添加服务,该模式可以序列化和反序列化您的域对象。
-
我在我的个人项目中使用带有 DDD 的洋葱架构(端口和适配器),并且我的视图模型很少看起来像我的域模型。或者,当我为客户做以数据库为中心的项目时,我看到他们在所有层中都使用相同的 EF 模型,因此我必须听取这导致的几十个问题。
-
@MickyDuncan 一个模型不适合任何重要的非 CRUD 应用程序。它迫使你将不同的用例(关注点)放在一个地方,最终你会得到一个科学怪人的怪物。随着时间的推移,这些模型以不同的方式发展,因此您希望每层/有界上下文有一个模型,以保持理智和高效。开发中的很多问题都是由于糟糕的设计和寻求最快/浅层的解决方案。
标签: c# asp.net-mvc serialization domain-driven-design onion-architecture