猿问

如何在MVC中构建模型?

如何在MVC中构建模型?

沧海一幻觉
浏览 1472回答 3
3回答

有只小跳蛙

作为业务逻辑的一切都属于模型,无论是数据库查询,计算,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中,您很少需要捕获/重新抛出异常,因为保留了回溯,特别是在您的示例中。只是抛出异常并在控制器中捕获它。

慕哥9229398

在Web-“MVC”中,您可以随心所欲。最初的概念(1)将模型描述为业务逻辑。它应该代表应用程序状态并强制执行一些数据一致性。这种方法通常被描述为“胖模型”。大多数PHP框架遵循更简单的方法,其中模型只是一个数据库接口。但至少这些模型仍应验证传入的数据和关系。无论哪种方式,如果将SQL内容或数据库调用分成另一层,那么你就不是很远了。这样,您只需关注真实的数据/行为,而不是实际的存储API。(但是过度使用它是不合理的。如果没有提前设计,你将永远无法用文件存储替换数据库后端。)
随时随地看视频慕课网APP
我要回答