【问题标题】:Automapper and enum property [closed]Automapper 和枚举属性
【发布时间】:2017-01-04 04:38:39
【问题描述】:

我想知道如果我们有一个具有此枚举属性或字段(域、DTO、ViewModel)的多层架构和类,我应该在哪里定义枚举?在 POCO 类内部或外部,在每一层中我们是否需要重复此代码等?

【问题讨论】:

    标签: c# .net architecture automapper


    【解决方案1】:

    我们使用 Domain、DTO、ViewModel... 分层架构,当我们定义需要跨层使用的枚举时,我们仅在 DTO 层中定义它们。这是因为根据定义,所有层都可以访问 DTO 层。我们使用在类外部创建此类共享枚举的标准,以提高可读性(即 EnumName.EnumValue 与 ClassName.EnumName.EnumValue),但我想这是一个偏好问题。

    【讨论】:

    • hmm...数据访问层知道业务层吗?这是正确的解决方案吗?
    • 我希望您的 DTO 层在特定于数据和视图的层之间是非常通用的定义。对我来说似乎是一个合理的解决方案。
    • 我们的数据访问服务返回 DTO 对象(是的,它们是通用的,即没有数据层元素和视图层元素),并且通常业务层纯粹在 DTO 对象中进行通信。
    • @sergio 我知道如果我有 3 层 DAL、BLL 和一些视图层,它们只会以自下而上的方式相互依赖(意味着 BLL 依赖于 DAL,而视图依赖于 BLL这意味着 DAL 对 BLL 一无所知)对吗?
    • 听起来不错。 DTO = 数据传输对象,因此在我们的世界中,DTO 层包含定义用于跨层通信的对象的类和枚举。 BLL 调用 DAL 并且 DAL 返回 DTO 对象。如果 DAL 方法需要任何输入参数,则这些参数也是 DTO 对象或原语。 View Layer 到 BLL 的通信也是如此。我们还允许 View 层与 DAL 通信,但同样只使用 DTO。 DTO 对象是层之间商定的通信“语言”。
    【解决方案2】:

    绝对不要重复代码,因为这可能会导致差异和难以找到错误。我的建议是将这些东西放在一个常用引用的 DLL 程序集中,这样它就可以被您的任何其他应用程序层使用,而不会引入额外的依赖项。

    【讨论】:

    • DRY 原理?)
    【解决方案3】:

    我个人在一个单独的文件中定义,例如,如果 a 具有枚举“Bla”,则将在“Bla.cs”中定义,任何使用该枚举的代码都将使用“using”指令。但这完全是可选的,定义枚举可以访问的位置是命名空间,所以:

    1. 如果您在命名空间“应用程序”中定义,您可以通过Application.Bla 访问它,或者在同一命名空间中仅通过“Bla”访问它
    2. 如果您在名为“Aclass”的类中定义,只要您将其定义为公共,您就可以通过Aclass.Bla 访问它

    【讨论】:

      猜你喜欢
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      相关资源
      最近更新 更多