Answers:
一种方法是在设计数据库之前先设计模型。设计模型时,重点是捕获问题域中的业务逻辑和含义。这应该以一种对业务有意义的方式来捕获,不仅包括实体和数据字段。有些数据元素是从其他数据元素解释而来的,有些则取决于其他条件,等等。此外,您还将向模型添加所需的任何基本逻辑,例如,将某个元素设置为某个值时,对象内部的响应方式。
您最终很可能会获得与持久存储数据相同90%以上的一致性。没关系。它可以完全相同而无需耦合。
还要注意,在真正的持久性无知的迷雾中对域进行建模对于软件设计来说是一个圣杯。如果可以做到,那就太好了。但是,如果问题域非常重要且具有复杂性,那么不时退出域建模还是一个好主意,以便对数据持久性进行完整性检查以确保您没有绘制陷入困境
只需记住各个组件的实际角色,并在设计它们时将它们分开即可。对于任何给定的设计决策,请问自己是否违反了以下任何角色:
您想拥有两件事。
您的“域模型”又称为数据实体,它们代表系统的实体,例如用户,帖子,产品等。
class PPI_Model_User {
protected $_conn = null;
function __construct(array $options = array()) {
if(isset($options['dsnData'])) {
$this->_conn = new PPI_DataSource_PDO($options['dsnData']);
}
}
function getAll() {
$rows = $this->_connect->query("SELECT .....")->fetchAll();
$users = array();
foreach($rows as $row) {
$users[] = new PPI_Entity_User($row);
}
return $users;
}
}
使用代码
$model = new PPI_Model_User(array('dsnData' => $dsnData));
$users = $model->getAll();
foreach($users as $user) {
echo $user->getFirstName();
}
在那里,您就可以创建域模型(实体),并使MVC模型执行数据库连接和数据操作。
如果您想知道什么是PPI,请使用Google搜索“ PPI框架”。
祝您搜索顺利。
此致,保罗·德拉贡尼斯(Paul Dragoonis)。