c# – 洋葱架构:我们应该在域实体中允许数据注释吗?

c# – 洋葱架构:我们应该在域实体中允许数据注释吗?,第1张

概述我希望将Onion Architecture实现到我们的ASP.NET MVC应用程序中.我理解将视图模型与域实体分开的必要性,但我发现自己正在编写冗余代码.存在冗余代码,因为我的视图模型和域实体看起来完全相同,除了我的视图模型具有[Serializable]数据注释.我需要这些模型可序列化,因为我使用的是ASP.NET会话状态,其中State Server需要对象可以序列化. 我个人觉得域实体不 我希望将Onion Architecture实现到我们的ASP.NET MVC应用程序中.我理解将视图模型与域实体分开的必要性,但我发现自己正在编写冗余代码.存在冗余代码,因为我的视图模型和域实体看起来完全相同,除了我的视图模型具有[Serializable]数据注释.我需要这些模型可序列化,因为我使用的是ASP.NET会话状态,其中State Server需要对象可以序列化.

我个人觉得域实体不应该是可序列化的,因为它会依赖于特定的技术.但是,如何避免冗余代码?

我应该补充一点,我的服务方法依赖于这些可序列化的数据模型.

解决方法 我会避免使用任何持久性或非域相关的东西来注释我的域对象.这样,我的Domain项目就不会依赖于另一个层了,我也不会把它与那些与Domain无关的东西弄得乱七八糟.虽然我们需要弯曲规则,但我更喜欢以不依赖于持久性细节的方式弯曲它们.

重点在于保持层次集中在它们的目的上,因为它很容易混合起来并创造(及时)大泥球.

在你的情况下,我觉得你没有真正拥有丰富的域名或者它是不正确的建模.看起来你只有数据结构,你的需求是CRUDy.

如果您确定应用程序不会变得更加复杂,即只是数据结构 *** 作,那么您可以使用一个模型将它们用于所有目的.基本上你可以偷工减料,并将“商业”模式用于一切.不需要抽象和其他东西.

但是如果您认为应用程序将会发展,或者它们是或将成为业务规则和流程,即您需要模拟业务所感知的行为,那么最好将事物保持非常分离,即使在此阶段它们似乎是相同.

为了方便起见,您可以为视图模型定义一个(使用复制粘贴)并使用automapper将业务对象映射到视图模型.其他方法可能是您的查询服务/存储库/对象可以直接返回该视图模型(将查询结果映射到视图模型)

总结

以上是内存溢出为你收集整理的c# – 洋葱架构:我们应该在域实体中允许数据注释吗?全部内容,希望文章能够帮你解决c# – 洋葱架构:我们应该在域实体中允许数据注释吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1252110.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存