当前位置:  开发笔记 > 编程语言 > 正文

如何使用Zend Framework正确创建域?

如何解决《如何使用ZendFramework正确创建域?》经验,为你挑选了1个好方法。

我前一段时间问过这个问题,但现在我正在寻求实现数据库访问层和域层之间的实际分离.我也将努力将业务逻辑移动到它所属的域和控制器脚本之外.

我正在使用Zend Framework为数据访问层实现表数据网关和行数据网关模式,但显然无法真正定义如何构建与数据访问层分离的域层.我考虑过使用Active Record模式,其中域逻辑与数据访问逻辑共存,但我有以下情况至少发生一次,我认为Active Record不会处理:

我有一个表"Person",其中包含person_id和userType字段.

每个userType(admin,buyer,associate,supervisor)都具有与之关联的特定业务逻辑,所有类型都从Person对象继承一些基本功能.

我不想使用专门属于一种类型用户的业务逻辑来膨胀Row Data Gateway对象,但我不确定如何构造域层来表示不同类型的用户.例如,我是否创建一个包含PersonGateway对象的Person对象,然后编写将调用传递给网关对象的包装函数,或者编写Person对象以扩展PersonGateway对象,然后只实现我需要的特定函数?

同样,我通常认为这是(部分)工厂问题,我需要一个工厂方法,它将基于userType实例化正确的子类.这仍然是Zend Framework的Zend_Db类中最好的方法吗?

任何有关如何在Zend_Db上正确创建域模型的教程的建议或链接将不胜感激.



1> Bill Karwin..:

域模型没有任何扩展.它们只是用于封装业务逻辑的普通类.它们可能使用数据访问对象,因此类中可能存在protected行数据网关对象的实例.甲Row对象通常比更接近地代表域的实例Table对象.此外,你总是能获得Table与对象RowgetTable()方法.

通常,DM类具有一个接口,其方法对应于您可以对该类执行的更高级操作.但您不一定要展示所有数据访问操作.

class Person {
  // Zend_Db_Table_Row object
  protected $data; 

  public function subscribeToService(Service $service) { ... }

  public function sendMailTo(Person $recipient) { ... }

  public function changePassword($newPassword) { ... }
}

去年春天我也在博客上写过这个主题,最近在ZF邮件列表上写了这篇文章.

至于教程和资源,请尝试http://domaindrivendesign.org/

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有