多层应用程序中模型的命名约定

时间:2016-04-25 23:44:37

标签: c# entity-framework mvvm domain-driven-design naming-conventions

我是一名新的开发人员,我从未在大型企业公司工作,所以我对多层应用程序中的命名约定有疑问。我有一个带有EF数据层的WPF / MVVM应用程序。我也想调整DDD原则。

所以,我会说同一个班级的三个模特。我有"模特"在MVVM中,我在EF中有一个实体/ dto(我不知道?),我在DDD中有域模型/ POCO。我必须创建所有这3个类来分离关注点(也许我可以将MVVM模型与POCO合并。我的意思是,POCO在MVVM中是有点模型)。我该如何命名?

我们说我有人POCO。应该是"人"或者" PersonDto"在EF?一般惯例是什么?我已经遇到了两种方式w / wo Dto postfix,所以我很困惑。

5 个答案:

答案 0 :(得分:5)

我通常为DTO和ReadModels / ViewModels添加后缀,但不包括域对象。

没有严格的规则,这是个人(或团队)偏好的问题。有些人喜欢让命名空间代替这个技巧,但我发现它不太明确。

编辑:顺便说一下,我not a huge fan有一个单独的“持久模型”(我not the only one)。在任何情况下,我都不会在该层 DTO 中调用对象。

答案 1 :(得分:4)

DTO:例如:PersonDto

  

DTO是一个定义数据如何通过数据发送的对象   网络

POCO :例如:Person

  

实体框架使您可以一起使用自定义数据类   使用您的数据模型而不对数据进行任何修改   课本身。这意味着你可以使用"普通的" CLR   对象(PO​​CO),例如现有域对象,与您的数据模型。   这些POCO数据类(也称为持久性无知对象),   它们映射到数据模型中定义的实体,支持   大多数相同的查询,插入,更新和删除行为作为实体   实体数据模型工具生成的类型。

希望这对你有所帮助。

答案 2 :(得分:2)

我认为重要的是记住一个人不是一个人。你想要分开它们的原因是因为它们可能会做很多不同的事情。

例如我可以拥有

人员数据库类/对象

(其中一部分)映射到学生域对象

然后前端为学生发送一个AddressChange更新。

当然你也可以拥有Person,PersonDTO和PersonDB,甚至还有PersonVM(比如你在前端使用javascript类型)。要记住的是,你要将它们分开,因为它们是完全不同的"。如果你强迫它们总是完全相同,那么就没有理由将它们分开。

答案 3 :(得分:0)

几个月前我发现了以下文章,在为项目命名类/实体时,它对我有意义。

Naming Conventions - XAML made easy

我也会帮助你

答案 4 :(得分:0)

  

我也想调整DDD原则。

然后绝对必须的是,域模型中使用的名称应与域专家的普遍使用的语言相匹配。