gpt4 book ai didi

c# - 洋葱架构 : Should we allow data annotations in our domain entities?

转载 作者:太空狗 更新时间:2023-10-29 21:33:25 26 4
gpt4 key购买 nike

我希望将洋葱架构实现到我们的 ASP.NET MVC 应用程序中。我理解将 View 模型与域实体分开的必要性,但是我发现自己在编写冗余代码。存在冗余代码,因为我的 View 模型和域实体看起来完全相同,除了我的 View 模型具有 [Serializable] 数据注释。我需要这些模型可序列化,因为我使用的是 ASP.NET session 状态,其中状态服务器需要可序列化的对象。

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

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

最佳答案

我会避免用任何持久性或非领域相关的东西来注释我的领域对象。这样,我的 Domain 项目就不会依赖于另一层,也不会被与 Domain 无关的东西弄得乱七八糟。虽然我们需要改变规则,但我更喜欢以不涉及对持久性细节的依赖的方式改变规则。

重点是让图层专注于它们的目的,因为很容易将它们混合起来并(及时)创建大泥球。

在您的情况下,我感觉您实际上并没有丰富的域,或者它的建模不当。看起来你只有数据结构,而且你的需求是 CRUDy。

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

但是,如果您认为应用会发展,或者它们是或将成为业务规则和流程,即您需要对业务所感知的行为进行建模,那么最好让事情保持高度分离,即使在这个阶段他们看起来是一样的。

为了简化操作,您可以为您的 View 模型定义一个(使用复制粘贴)并使用自动映射器将业务对象映射到 View 模型。其他方法可能是您的查询服务/存储库/对象可以直接返回该 View 模型(将查询结果映射到 View 模型)

关于c# - 洋葱架构 : Should we allow data annotations in our domain entities?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28435318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com