PHP OOP:业务逻辑层 - 数据库层

时间:2011-04-15 08:50:59

标签: php oop design-patterns

使用OOP在业务逻辑对象和数据库之间进行分层的好设计是什么?

2 个答案:

答案 0 :(得分:9)

其中任何一个都可行(from Fowler's POEAA):

数据源架构模式:

  • 表数据网关充当数据库表网关的对象。一个实例处理表中的所有行。
  • 行数据网关一个对象,充当数据源中单个记录的网关。每行有一个实例。
  • Active Record 在数据库表或视图中包装行的对象,封装数据库访问权限,并在该数据上添加域逻辑。
  • 数据映射器一层Mappers,它在对象和数据库之间移动数据,同时保持它们彼此独立以及映射器本身。

选择哪个取决于您选择的是哪一个(相同来源):

域逻辑模式:

  • 交易脚本: 按程序组织业务逻辑,每个程序处理来自演示文稿的单个请求
  • 域模型: 包含行为和数据的域的对象模型
  • 表模块: 处理数据库表或视图中所有行的业务逻辑的单个实例。
  • 服务层: 使用一组服务定义应用程序的边界,该服务层建立一组可用操作并协调应用程序在每个操作中的响应。

通常,您的业务对象越接近数据库架构并且以CRUD操作为中心,您的数据源架构和Doman逻辑模式就越简单(但它不必)。如果您发现自己有很多阻抗不匹配或许多业务逻辑与数据库数据没有直接关系,那么您可以选择域模型/数据映射器(也可能包括ORM)。

答案 1 :(得分:2)

您可以采用多种方法,但我想推荐的是DataMapper模式与域模型相结合。有关详细信息,请参阅this page

通过这种方式,您可以轻松地从域模型(业务逻辑)中分离数据访问。 如果您对OOP有点熟悉,那么上面链接的页面中的UML模型应该阐明方法的方式,以及它如何从业务逻辑中分离数据库逻辑。