簡體   English   中英

PHP MVC 模型命名約定,單數/復數?

[英]PHP MVC model naming convention, singular/plural?

我想知道創建/命名模型的首選方法是什么?

我的應用程序有一個“用戶”模型,其中包含用於創建、獲取、更新(等)用戶記錄的所有相關業務邏輯。

在我的一些控制器中,我可能想要獲取多個“用戶”記錄的列表。

在這種情況下,我應該創建一個名為 Users 的全新模型嗎?

在我看來,有幾個選擇:

  1. 我可以授予對控制器的數據庫訪問權限,並且控制器可以查詢所有相關用戶,然后在我循環訪問它們時創建一個用戶模型對象。 (壞的)

  2. 我可以有兩個單獨的模型,“用戶”和“用戶”。 用戶對象將處理創建、獲取、更新單個記錄,而用戶對象實際上只對列出所有用戶記錄有用。

我不喜歡做這樣的事情的想法:

$user = new User();
$user->fetchAll();

純粹出於語義原因。 在我看來,一個用戶對象應該只與一個用戶記錄相關。

也許我想錯了,我的“用戶”模型,它與數據庫中的“用戶”表相關,從一開始就應該真正命名為“用戶”。

你如何處理這個問題?

嗯,我想盡量保持一致.. 對我來說,我將使用 User 模型與表 User 進行交互,所以我並不關心我將與多少條記錄進行交互..

檢查這個問題: 要構建一個 php MVC,我需要注意哪些命名約定?

我認為你有正確的想法。 為了保持單一職責,您的User()類不應參與表的獲取和更新。 它應該只代表一個用戶,它的功能應該與之直接相關。 如果你開始將你的User()函數和表的函數混合在一起,你就破壞了單一職責。 出於這個原因,我采用第二種方法,這就是它在我使用過的框架中的工作方式

在 Zend Framework 中,擴展Zend_Db_Table的類處理表操作,並返回擴展Zend_Db_Table_Row的類。 在 Zend Framework 中, Zend_Db_Table_Row有一個savedelete方法,它回調表來進行實際的保存和刪除。 我認為這與唱責任保持一致,因為您認為該責任直接與該行有關,而不僅僅是與該行分離的模型。 不過,你有兩個班級。 一個表類和一個行類

在 Doctrine 中(我是新手,所以我不熟悉高級用法),每個模型都代表表中的一行,即使定義行中的列也是如此。 這些行由 Doctrine Repository 獲取、更新和創建。 如果您只需要表的存儲庫,那么您可以這樣做,但它是與User()不同的類

總而言之,為了符合單一職責,我會讓UsersTable()::fetchAll()返回User[] 就個人而言,我希望User能夠調用UsersTable來更新或刪除該行,但這只是個人喜好。

您不需要單獨的模型來表示單數或復數版本。 只是其中之一。 您可以擁有用戶實例的集合,但這是一個集合(數組),而不是“用戶”類。

實際上,您可以在語義上隨意調用您的模型,但單數似乎是公認的規范。

基本上,您應該考慮的方式是用戶模型代表單個“用戶”,因此您的用戶服務/存儲庫的 findAll 方法應該返回單個用戶實體/模型的集合/數組。

在過去的幾天里,我一直在為同樣的事情撞牆。

我寧願自己保留一個班級,但我想這是 OOP 可能會受到輕微限制的地方。

我會說如果你只想要一個類,那么我會選擇復數,因為用戶返回多個用戶沒有語義意義,

我知道這已經得到回答,但我會貢獻我的 2 美分:

class UserModel
{
    /**
    * @var $user
    */
    public $user;

    function __construct()
    {

    }

    public function get_all()
    {
         //Get all products
    }

    public function get($where)
    {
         //Get user instance here either by:
         $this->user = $result; //Result from SQL Row
         //or:
         return new User($result);
    }
}

class User
{
    public $firstname;
    public $lastname;
    public $somevar;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM