有只小跳蛙
作为业务逻辑的一切都属于模型,无论是数据库查询,计算,REST调用等。您可以在模型本身中访问数据,MVC模式不会限制您这样做。您可以使用服务,映射器和其他方法对其进行糖涂层,但模型的实际定义是处理业务逻辑的层,仅此而已。它可以是一个类,一个函数,或一个包含大量对象的完整模块,如果这是你想要的。拥有一个实际执行数据库查询的单独对象总是更容易,而不是直接在模型中执行它们:这在单元测试时会特别有用(因为在模型中注入模拟数据库依赖项很容易):class Database {
protected $_conn;
public function __construct($connection) {
$this->_conn = $connection;
}
public function ExecuteObject($sql, $data) {
// stuff
}}abstract class Model {
protected $_db;
public function __construct(Database $db) {
$this->_db = $db;
}}class User extends Model {
public function CheckUsername($username) {
// ...
$sql = "SELECT Username FROM" . $this->usersTableName . " WHERE ...";
return $this->_db->ExecuteObject($sql, $data);
}}$db = new Database($conn);$model = new User($db);$model->CheckUsername('foo');此外,在PHP中,您很少需要捕获/重新抛出异常,因为保留了回溯,特别是在您的示例中。只是抛出异常并在控制器中捕获它。