簡體   English   中英

Yii和靜態函數

[英]Yii and static functions

擁有很多靜態函數是不好的做法嗎? 我正在使用Yii框架,我意識到我的模型類中有很多靜態函數。 我把與User有關的所有函數都放到了UsersModel中(我也對其他模型做了同樣的事情),但我最終得到了很多靜態函數。 只是想知道你們如何處理這個問題。 很多這些函數只是查詢構建器函數而不是延遲加載,因為我需要提高數據庫性能。

示例功能:

User::getUserFromCampaign(1)
User::getUsersNotInCamapaigns()
User::isAdmin()

您可以做的不是使用靜態函數,而是在需要這些方法的模型中實例化User類的對象(可能不是靜態類),並直接使用對象的方法。

這也意味着這些方法只會加載到需要它們的對象上,而不是“全局”。

以下是一個很好的答案: https//softwareengineering.stackexchange.com/questions/98083/cant-i-just-use-all-static-methods

實例化您的類最適合測試,但對於某些任務使用靜態沒有問題。

很多都是觀點,如果您的代碼有效,它運行高效且易於維護,那么一切都很花哨!

還要添加到Laravel門面評論。 Laravel確實實例化了這個類,一個外觀只是為更大的圖片提供了一個簡化的界面,讓我們說..這正是laravel正在做的事情。 最終結果是非常好的可讀代碼。

MVC是一個很好的設計模式,它有它的位置。 工廠設計模式是另一個很好的模式。 如果您不熟悉它,Google for Factory設計模式 簡而言之:FooFactory是一個生成Foo類對象的類(如果願意,還可以生成FooModel類)。

MVC和Factory不是互斥的,因此您可以將許多靜態方法重構為新的UserFactoryClass。

  • User::getUserFromCampaign(1)對我來說, User::getUserFromCampaign(1) 我認為1是廣告系列ID? 然后用戶返回什么? 或者廣告系列只能有一個用戶? 如果是這種情況,則UserFactory::getUserFromCampaign()將為具有給定ID的廣告系列中的用戶返回UserModel對象。

  • 我假設User::getUsersNotInCampaign()返回一個UserModel對象數組? 將它重構為`UserFactory::getUsersNotInCampaign()然后你就去了。

  • User::isAdmin()根本不應該是靜態的。 if ($user->isAdmin()) ... ,而不是if(User::isAdmin($user))...

暫無
暫無

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

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