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

Naming conventions for model in multi layer application

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

所以,我会说三个相同的模型class。我在 MVVM 中有 "model",在 EF 中有 entity/dto(我不知道?),在 DDD 中有域 model/POCO。我必须创建所有这 3 个 classes 来分离关注点(也许我可以将 MVVM 模型与 POCO 合并。我的意思是,POCO 是 MVVM 中的一种模型)。我应该如何命名它们?

假设我有个人 POCO。在 EF 中应该是 "Person" 还是 "PersonDto"?一般约定是什么?两种方式我都遇到过w/wo Dto postfix,所以我很困惑。

几个月前我看到了以下文章,在为我的项目命名 classes/entities 时它对我来说确实有意义。

Naming Conventions - XAML made easy

希望对你也有帮助

DTO :例如:PersonDto

A DTO is an object that defines how the data will be sent over the network.

POCO :例如:Person

The Entity Framework enables you to use custom data classes together with your data model without making any modifications to the data classes themselves. This means that you can use "plain-old" CLR objects (POCO), such as existing domain objects, with your data model. These POCO data classes (also known as persistence-ignorant objects), which are mapped to entities that are defined in a data model, support most of the same query, insert, update, and delete behaviors as entity types that are generated by the Entity Data Model tools.

希望对您有所帮助。

I also want to adjust DDD principles.

那么绝对必须的是领域模型中使用的名称应与领域专家的通用语言相匹配。

我认为重要的是要记住一个人不是一个人。之所以要将它们分开,是因为它们可能会做非常不同的事情。

例如我可以

人物数据库class/object

(其中的一个子集)映射到学生域对象

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

当然你也可以有 Person、PersonDTO 和 PersonDB 甚至 PersonVM(假设你在前端使用 javascript 类型)。要记住的是,你将它们分开是因为它们是 "completly different"。如果您强迫它们始终完全相同,那么实际上没有理由将它们分开。

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

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

编辑 :顺便说一句,我是 not a huge fan of having a separate "persistence model" (and I'm not the only one)。在任何情况下,我都不会调用该层中的对象 DTO's.