Yii2的model中應該包含哪些代碼?

來源:互聯網
上載者:User
model中除了包含資料驗證及基本的刪除外,還能寫哪些代碼?如果要進行多行添加、刪除、更新,資料預先處理需要根據多種條件進行判斷,同時要進行多個表的操作(並不存在一對多、多對一這樣的關係),這裡有很大一部分代碼,寫到controller中感覺很大,寫在model感覺有時還不行,這些難道都寫在helper裡面,還是有其他好的地方來組織?

回複內容:

model中除了包含資料驗證及基本的刪除外,還能寫哪些代碼?如果要進行多行添加、刪除、更新,資料預先處理需要根據多種條件進行判斷,同時要進行多個表的操作(並不存在一對多、多對一這樣的關係),這裡有很大一部分代碼,寫到controller中感覺很大,寫在model感覺有時還不行,這些難道都寫在helper裡面,還是有其他好的地方來組織?

憑感覺和經驗吧,我的回答純粹是拋磚。
Yii2裡面沒有什麼特別的model概念,包含文檔和樣本裡面都很少提到這個東西,我感覺他們就是希望一切都用ActiveRecord對象(甚至form都是繼承於此)就夠用了,但是實際上這是很糟糕的事情,因為當多表聯動的時候對象邊界就會變得很模糊。然而實際上我在某個項目中自訂了model層後對方竟然還用這種寫法不是Yii2推薦的為由拒付了項目尾款,所以我更是對此吐槽不已。
在我看來,ActiveRecord對象是對資料表的映射,它應該只處理內部的事情,這無疑就清晰了很多。它就是資料表的實體映射,不是model。
但是,很多時候多個表之間必然是聯動的,如建立訂單的時候必然要同時操作訂單詳情,那麼這種邏輯控制應該是在model中完成。
此外,如果Controller和ActiveRecord分別由不同的開發人員完成時,model層也很重要,可以用於雙方的耦合,因為允許在Controller中直接調用ActiveRecord實際上是挺危險的。

至於你覺得Model不夠用,還可以選擇 Service, Plugin, Filter等,而不只僅限於Helper。

補充:貌似還一直沒扣題呢,哈哈
我認為Model是在資料表基礎上更為複雜的一種資料模型,往往表示了開發人員對對象的理解與定義,例如我們有訂單表和訂單詳情表,但是這不是對象層級的資料,而OrderModel則是對訂單對象的聲明,一個訂單不但有訂單資訊,同時包含訂單詳情,甚至可能關聯物流、發票等。
我在Model中通常會包含
常量定義,如果需要設定一些特定標示的話
事物處理,如果需要多個ActiveRecord聯動的話
簡單CRUD,如果需要隔離ActiveRecord的話,即約定Controller不去直接調用此類型的對象,而是必須通過model中封裝的方法
其它,我覺得Helper主要是給前端用的,所以一個方法常用但是前端不用,那麼可以放在model裡面;此外,有的方法可能不好確認其歸屬,即Amodel需要,Bmodel也需要,也簡單,兩處都聲明,只不過一個是具體邏輯,另一個僅僅引用而已。

你可以使用行為(Behaviors).
把模稜兩可的共用代碼 放在行為裡。
類似於Traits。

或者組件。Components

對象的資料屬性和行為。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.