不久前我问过这个问题,但现在我希望在我的数据库访问层和域层之间实现实际的分离。我还将努力将业务逻辑移入它所属的域并移出控制器脚本。
我正在使用 Zend 框架,它为数据访问层实现了表数据网关和行数据网关模式,但它显然未能真正定义如何构建与数据访问层分离的域层。我考虑过使用域逻辑与数据访问逻辑共存的 Active Record 模式,但我有以下情况至少发生一次,我认为 Active Record 无法处理:
我有一个包含 person_id 和 userType 字段的表“Person”。
每个 userType(admin、buyer、associate、supervisor)都有与之关联的特定业务逻辑,并且所有类型都从 Person 对象继承了一些基本功能。
我不想用仅属于一种用户类型的业务逻辑来膨胀 Row Data Gateway 对象,但我不确定如何构造域层来表示不同类型的用户。例如,我是创建一个包含 PersonGateway 对象的 Person 对象,然后编写将调用传递给网关对象的包装函数,还是编写 Person 对象来扩展 PersonGateway 对象,然后只实现我需要的特定功能?
同样,我通常认为这(部分)是一个工厂问题,我需要一个工厂方法来实例化基于 userType 的正确子类。这仍然是 Zend Framework 的 Zend_Db 类的最佳方法吗?
任何有关如何在 Zend_Db 之上正确创建域模型的建议或教程链接将不胜感激。