Cen*_*ion 9 php activerecord design-patterns
简单地说一下Table Data Gateway(TDG)实现:您创建单独的TDG类,其中包含用于具有特定表的CRUD操作的SQL.因此,您的模型不是直接与数据源(例如数据库)通信,而是通过那些抽象的 - TDG类.因此,它只是一种进行另一级抽象的方法,它只是与数据库通信的包装器 - 获取和修改数据.恕我直言TDG类不应包含成员,只能包含方法.这是一个可视化使用TDG模式的好模式.使用TDG方法时,SQL应该从模型类移动到数据源(TDG)类.我通过TDG类从DB检索的所有数据都存储在我的模型成员中.
现在,活跃的记录实施怎么样?如果我将数据访问和我的模型类合并到一个模型类中,那么我会实现活动记录吗?我无法找到明确的区别或这些模式在PHP中的外观和彼此不同.
通常,我有一个单例数据库类,然后为每个数据库表分离模型类.每个模型类都有CRUD +几个自定义(计数,平均等)操作.有些类具有成员来保持CRUD或自定义操作的结果 - 这是根据需要完成的.这种方法可以被确定为活跃记录吗?另外,如果我将SQL从我的模型类移到TDG类,那么这将是Table Data Gateway吗?
Gor*_*don 14
来自http://martinfowler.com/eaaCatalog/index.html
表数据网关:充当数据库表的网关(466)的对象.一个实例处理表中的所有行.

活动记录:在数据库表或视图中包装行的对象,封装数据库访问,并在该数据上添加域逻辑.

最明显的主要区别在于TDGS包访问表,只返回行数据,而人工鱼礁包装获得了排在表中,并增加了业务逻辑吧.
除非您具有非常低的阻抗不匹配,否则首选TDG是因为对于AR,您的业务/域对象遵循数据库中的结构,我们通常不应该如何对域对象进行建模.A Row可能知道如何坚持自己,但是一个人不应该知道.从长远来看,分离持久性逻辑和域逻辑更加可维护.
关于您的Singleton DB对象,请看一下在PHP中是否存在具有数据库访问权限的单例的用例?.