领域层和持久化层的区别

6
域层和持久层是同一个东西还是不同的东西?域层是DAO,通常我们将其映射到数据库表中,那么持久层是否意味着相同或者还有其他含义?
如果我们将映射到数据库表的POJO称为DAO,那么用于执行查询并填充这些DAO(POJO)的类应该怎么称呼呢?
最佳实践是什么?将查询执行代码放在这些POJO中,还是将它们作为单独的类?例如,假设A是映射到数据库表A的类。我们需要像ADaoImpl一样实现单独的类来存放类A所需的与查询相关的代码吗?我相信这是不正确的。难道不是最佳实践将所有DAO对象的填充、查询执行等相关操作都放在一个名为RDBMSDaoImpl的类中吗?因此,我们称该类为应用程序的DAO实现类,它属于DAO层对吧?
因此,总结一下,POJOS(DAO)和DAOImpl是我们应用程序的DAO层,而持久层是什么呢?
谢谢。
3个回答

3

维基百科:业务逻辑层(BLL),也称为领域层。因此,这是您的服务层,在其中执行业务逻辑。持久化层负责操作数据库,并由服务层使用。

(顺便说一句,在无状态、臃肿服务和仅具有getter和setter的领域对象的贫血应用程序中,我更喜欢“服务层”而不是“领域层”。)


是的,我会这么说。虽然理论上可以是两个单独的层,但我猜想它们应该是一起的。 - Bozho
在BLL中,对象可以进一步分为业务流程(业务活动)和业务实体。业务流程对象通常实现控制器模式,即它们不包含数据元素,但具有协调业务实体之间交互的方法。业务实体通常对应于逻辑域模型中的实体,而不是物理数据库模型中的实体。我认为他们所说的业务实体应该是领域模型,而业务流程应该是服务层,不是吗? - Harshana

2

领域层是您对对象和应用程序功能进行建模的地方。 如果您正在构建发票应用程序,则领域层应包含发票,增值税和发票项目对象等。 DAO层负责从存储(RDMS数据库,NoSQL数据库等)中检索和保存对象。

在您的代码中,您可以拥有类似以下内容的内容:

public InvoiceDao {
    public void insert(Invoice invoice) {
    //use your database api to insert invoice
    }
}

谢谢。那么你的意思是领域层和DAO层是不同的,是吗?听起来对。顺便说一下,我已经编辑了我的问题并添加了更多内容。你有我的扩展问题的答案吗? - Harshana
你应该将包含数据和业务逻辑的类与持久化对象的类分开。POJO不是DAO。如果你看一下我提供的示例代码,就会清楚地看到POJO和DAO是两组非常不同任务的类。DAO层负责管理POJO的持久状态。域(或服务)层是放置业务逻辑的地方。 - Giovanni
是的,但我应该补充一下,服务层实现业务逻辑并将域对象保持为POJO而没有任何业务实现,对吧?因此,基本上流程是视图<->控制器<->服务层(业务逻辑)<->DAO层<->域层,对吧? - Harshana
响应比较复杂,它实际上取决于您想如何构建应用程序。链式结构 <-> 控制器 <-> 服务层(业务逻辑)<-> DAO 层是常见的一种。领域层对象在业务逻辑内部和 DAO 层内部使用以实现持久性。如果您将领域对象建模为简单的 POJO,则可以在视图/控制器层中使用 DTO。 - Giovanni
你的意思是如果我将领域对象建模为POJO,那么DTO的术语也指的是同样的东西,对吗? - Harshana

1

1- 持久层:处理数据库的层,由一组映射数据库和所有操作的类组成。 摘要:将数据库与业务层分离。 2- 业务(数据访问层):从持久层中存在的类初始化(创建)对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接