PHP OOP:业务逻辑层-DB层

发布于 2024-11-01 11:23:42 字数 40 浏览 0 评论 0原文

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

what could be a good design for layering between the business logic objects and the Database using OOP?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空宴 2024-11-08 11:23:42

其中任何一个都可以(来自 Fowler 的 POEAA):

数据源架构模式:

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

选择哪一个取决于您选择了以下哪一个(同一来源):

域逻辑模式:

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

一般来说,您的业务对象与数据库模式越相似并且以 CRUD 操作为中心,您的数据源就越简单架构和领域逻辑模式可以是(但不一定是)。如果您发现自己有很多阻抗不匹配或有很多与数据库数据不直接相关的业务逻辑,那么您可能会选择域模型/数据映射器(并且可能还包括 ORM)。

Any of these would work (from Fowler's POEAA):

Data Source Architectural Patterns:

  • Table Data Gateway: An object that acts as a Gateway to a database table. One instance handles all the rows in the table.
  • Row Data Gateway: An object that acts as a Gateway to a single record in a data source. There is one instance per row.
  • Active Record: An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data.
  • Data Mapper: A layer of Mappers that moves data between objects and a database while keeping them independent of each other and the mapper itself.

Which to choose depends on which of these you picked (same source):

Domain Logic Patterns:

  • Transaction Script: Organizes business logic by procedures where each procedure handles a single request from the presentation
  • Domain Model: An object model of the domain that incorporates both behavior and data
  • Table Module: A single instance that handles the business logic for all rows in a database table or view.
  • Service Layer: Defines an application's boundary with a layer of services that establishes a set of available operations and coordinates the application's response in each operation.

In general, the more closely your business objects resemble the DB schema and is centric around CRUD operations, the simpler your Data Source Architectural and Doman Logic pattern can be (it doesnt have to though). If you find yourself with a lot of Impedance Mismatch or with lots of Business Logic not directly related to the DB data, then you might opt for Domain Model / Data Mapper (and might also include an ORM).

玩世 2024-11-08 11:23:42

您可以采用多种方法来实现此目的,但我想推荐的一种方法是将 DataMapper 模式与域模型相结合。请参阅此页面了解更多信息。

通过这种方式,您可以以一种良好且简单的方式将数据访问与域模型(业务逻辑)分开。
如果您对 OOP 有点熟悉,上面链接的页面中的 UML 模型应该阐明方法的方式,以及它如何将数据库逻辑与业务逻辑分开。

There are several approaches you can take with this, but one i'd like to recommend is the DataMapper pattern combined with domain models. See this page for more information.

This way you seperate your data access from your domain models (business logic) in a good and easy way.
If you're a little bit familiar with OOP, the UML model in the page linked above should clarify the way of approach, and how it seperates database logic from business logic.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文