【问题标题】:Class Name: Append DTO or Entity [closed]类名:附加 DTO 或实体 [关闭]
【发布时间】:2015-05-28 17:14:25
【问题描述】:

对于将DTOEntity 附加到类名是否有任何偏好?

这方面有什么标准吗?

1个类被ORM(EntityFramework)使用,另一个类用于序列化。

这样做的原因是所有字段都没有重复,因为 EntityFramework 是 DTO 类(大多数但不是所有属性)的包装器。

DTO 类位于共享库中,与 EF 解耦。

例如以下哪个是最常见/标准的方法?

// 1.
MyNamespace.Entities.MyClass
MyNamespace.Models  .MyClassDto


// 2.
MyNamespace.Entities.MyClassEntity
MyNamespace.Models  .MyClass


// 3.
MyNamespace.Entities.MyClassEntity
MyNamespace.Models  .MyClassDto

【问题讨论】:

  • 这很大程度上取决于个人喜好。一个合适的经验法则:它是一个数据传输对象吗?继续使用Dto 后缀。它是数据库实体/实际数据吗?不带任何后缀。
  • 我在哪里可以问这样的问题?红迪网?

标签: c# serialization naming-conventions dto


【解决方案1】:

根据我的个人经验,您的第三个示例是我使用过的唯一实现,也是我要争论的一个,因为您正在使用的对象的意图总是很清楚,而对于其他两个,它只会变得清晰同时查看两个对象时。

话虽如此,只要您的团队就使用 any 达成一致意见。

【讨论】:

    【解决方案2】:

    在我看来,您通常不想将实现细节放入类名中,原因与您不想使用匈牙利表示法的原因类似。

    如果有一些代码需要同时处理这两种类型并区分它们,另一种选择是包括使用这样的语句的别名:

    using entities = MyNamespace.Entities;
    using dto = MyNamespace.Models;
    
    //in code
    var myClassEntity = new entities.MyClass();
    var myClassDto = new dto.MyClass();
    
    //work with both
    

    我的假设是,需要使用这两种类型的代码仅限于一个独立的库,并且客户端代码通常使用一种类型,而不是两种类型。

    【讨论】:

    • 这就是我目前所拥有的 :-( 这很痛苦,而且很丑陋,尤其是当你有一个泛型时,你必须不断地到处传递它 + 一堆工具将其报告为我的团队不赞成的关键问题:-(
    • 诀窍是让消费者只能引用一种类型,而不是两者都引用,所以它只在数据访问/转换代码中需要。如果“实体”类仅用于数据访问,则将它们封装在库中,这样只有该库必须处理这两者。唯一应该处理这两种类型的类应该是一些简单的转换器,然后应该只从那里传递一个可解析的类型。否则,您可能会使用更改名称来隐藏可能的工程问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多