从DAL返回的对象的DTO等效术语是什么?

时间:2017-09-07 08:08:38

标签: data-access-layer dto

我已经在使用DTO进行网络数据传输。现在,我还向DAL引入了不同类似DTO的类。这是为了避免跨层传递应用程序(业务)对象。

为了避免命名混淆,我想使用另一个术语而不是DTO,但找不到合适的术语。

从DAL返回的对象的DTO等效术语是什么?

1 个答案:

答案 0 :(得分:3)

  

“名字中的名字是什么?我们称之为任何其他名字的玫瑰都会闻起来很甜蜜。” - 威廉莎士比亚

另外,Martin Fowler says关于POJO:

  

在演讲中,我们指出了将业务逻辑编码为常规Java对象而不是使用Entity Bean的许多好处。我们想知道为什么人们如此反对在他们的系统中使用常规对象并得出结论,这是因为简单对象缺少一个奇特的名字。所以我们给了他们一个,它很好地接受了。

顺便说一下,这并不重要。考虑到您的关注以避免因类似命名而产生混淆,您可以选择“DataModel”,“Entity”,“POCO”。

对于通常使用的不同字词,以下非常宽松 注意事项

关系模型[数据库层]:

  • 数据库,表格和字段。

持久性模型[数据访问层]:

  • (通常)属于ORM或与数据库密切相关的模型。
  • 这用于持久性需求。

域模型/业务模型[业务逻辑/服务层]:

  • 公开给BLL /服务层的模型。

查看模型[UI图层]:

  • 向View公开的模型。

<强> DTO:

  • 仅保留状态并用于将数据从一个图层传输到另一个图层。
  • 除序列化外没有任何行为/逻辑。
  • 最好是可序列化的。
  • 针对请求层设计;与数据库不相似。
  • 没有自己的身份。

<强> POCO:

  • 它只是一个常规对象,没有任何特定框架的引用,也没有遵循它们的接口或限制。
  • 可以与任何ORM一起使用的持久性无知对象。
  • 保存数据库中的数据。
  • 不一定是可序列化的。
  • 根据数据库请求设计。
  • 可能具有验证逻辑或与POCO紧密绑定的其他逻辑(如数据加密/列的唯一性)。
  • 没有像Get,Save等持久性方法.POCO不会自行填充。
  • 可能有自己的身份。

<强>实体:

  • 它必须有自己的身份,并且可以唯一识别。
  • 可以使用DataContext从数据库加载并保存到数据库的对象。
  • 没有DataBaseContext就不能存在。
  • 与特定ORM紧密绑定并实现其规则(默认构造函数,虚拟属性以创建运行时代理等)。
  • 实体代表域模型和域逻辑。

<强>型号:

  • 用于表示保存数据的任何对象的常用术语。
  • 上面的所有对象,如果我们将其中的任何一个放入MV *模式中,它就变成了Model。

参考以下答案:

https://stackoverflow.com/a/37751345/5779732

https://stackoverflow.com/a/41122476/5779732

https://stackoverflow.com/a/42801839/5779732