我希望在我们的asp.net mvc应用程序中实现洋葱架构。我理解将视图模型与域实体分离的必要性,但是我发现自己正在编写冗余代码。有多余的代码,因为我的视图模型和域实体看起来完全相同,只是我的视图模型有[serializable]数据注释。我需要这些模型可序列化,因为我使用的是asp.net会话状态,其中状态服务器需要对象可序列化。
我个人认为域实体不应该是可序列化的,因为它将依赖于特定的技术。但是,如何避免冗余代码?
我应该补充一下,我的服务方法依赖于这些可序列化的数据模型。

最佳答案

我将避免使用任何持久性或与域无关的内容来注释我的域对象。这样,我的域项目就不会依赖于另一层,我也不会让它与域无关的东西乱七八糟。虽然我们需要改变规则,但我更喜欢用一种不依赖于持久性细节的方式来改变规则。
关键是要让这些层专注于它们的目的,因为很容易把它们混合起来(及时)形成一个大泥球。
在你的情况下,我觉得你没有一个真正的丰富的领域或它是不适当的模式。似乎你只有数据结构,而且你的需求很粗糙。
如果你确定应用程序不会变得更复杂,也就是说它只是数据结构操作,那么你可以有一个模型来使用它们。基本上你可以抄近路,用“商业”模式来做任何事情。不需要抽象和其他东西。
但是,如果您认为应用程序将不断发展,或者它们是或将是业务规则和流程,即您将需要按照业务所感知的方式对行为建模,那么最好保持事物的非常分离,即使在现阶段它们看起来是相同的。
为了更简单,对于视图模型,您可以定义一个(使用复制粘贴)并使用automapper将业务对象映射到视图模型1。另一种方法是,查询服务/存储库/对象可以直接返回该视图模型(将查询结果映射到视图模型)

08-18 10:36
查看更多