为了账号安全,请及时绑定邮箱和手机立即绑定

如何在MVC中构建模型?

/ 猿问

如何在MVC中构建模型?

沧海一幻觉 2019-05-23 10:43:36

如何在MVC中构建模型?

查看完整描述

3 回答

?
慕莱坞5435954

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


查看完整回答
反对 回复 2019-05-23
?
慕哥9229398

在Web-“MVC”中,您可以随心所欲。

最初的概念(1)将模型描述为业务逻辑。它应该代表应用程序状态并强制执行一些数据一致性。这种方法通常被描述为“胖模型”。

大多数PHP框架遵循更简单的方法,其中模型只是一个数据库接口。但至少这些模型仍应验证传入的数据和关系。

无论哪种方式,如果将SQL内容或数据库调用分成另一层,那么你就不是很远了。这样,您只需关注真实的数据/行为,而不是实际的存储API。(但是过度使用它是不合理的。如果没有提前设计,你将永远无法用文件存储替换数据库后端。)


查看完整回答
反对 回复 2019-05-23

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信