了解域层和基础架构层之间的交互

时间:2014-06-12 07:12:13

标签: domain-driven-design

我试图正确理解分层架构的概念。我想我理解了大部分概念,但是有一两件事我还不清楚......

所以我理解每个单独层的目的:表示层用于UI和用户交互,应用层坐标应用逻辑和域对象,域层是所有业务逻辑所在的位置,基础层用于持久性和访问外部服务,如网络能力等。

据我所知,每一层应仅依赖于它下面的层,并且这些层应该用接口分隔。我很难理解的是域层和基础设施层之间的交互......

我正在开发一个以数据库为中心的桌面应用程序。我最初的方法是将所有信息从数据库中提取到内存中的域模型中。然后,模型将在应用程序的持续时间内存在,然后仅在用户保存后才持久保存到数据库。我对这种方法有疑问......从我所看到的,似乎我只应该根据需要从数据库中提取数据。换句话说,将信息拉入对象,编辑对象,并在完成后将对象推回数据库。令我困惑的是,一旦它们离开数据库,对象就会与它们的状态断开连接。因此,我想把对象A从数据库中拉出来,然后进行编辑。在我将其提交回数据库之前,应用程序的另一部分还将对象A拉出数据库。现在,我的域图层中存在相同的两个对象,具有不同的引用,并且具有不同的状态。这对我来说似乎是个噩梦。我错过了什么吗?我应该一次只允许一个交易来避免这个问题吗?

我最初将所有数据拉入内存模型的方法是错误的吗?我的应用程序可能有多达10 000条记录,所以我想它可能导致内存问题?

附注:我现阶段没有使用任何ORM。

任何帮助或见解都将不胜感激!

1 个答案:

答案 0 :(得分:1)

  

基础架构层用于持久性和访问外部服务,如网络功能等。

持久层用于持久性,基础设施层通常是一个交叉层(即它跨越不同的层垂直跨越),这可能包括记录或你提到的内容。

您对数据更新的担忧是一个典型的并发问题,并非特定于分层体系结构。有许多解决方案,典型的解决方案是optimistic concurrency control,它会在使用新值更新之前检查旧值是否未被修改。类似的方法是使用自动增量值而不是旧值。