2012-07-13 55 views
4

我讀了一個很好的做法有實體光,只有getter和setters。但是,例如,我有一些邏輯的自定義方法。Symfony2:最好的地方把bussines邏輯

public function calculatePrice(){ 

    /* 
Here I have to do many math operations 
including access to other repositories to get 
specific data (taxes, comissions, ect) from others entities 
*/ 


} 

如果把這種「更復雜的方法」爲辦:

//in controller 
$product->calculatePrice() 

//in twig templates 
{{ product.calculatePrice }} 

回答

10

我喜歡把一個服務類中與實體相關的業務邏輯。國際海事組織,一個實體庫應該只負責查詢數據庫實體組的多個項目,或非常具體的'findBy'方法(例如:獲取所有Messages屬於User,其中isRead = 0)。

很多時候,您會發現自己使用多個服務類來處理特定的業務邏輯塊 - 將所有這些保留在服務層而不是鞋 - 將它們放到存儲庫中更容易(也更簡潔)。

對業務邏輯使用服務將導致更多的模塊化代碼。如果您的Product實體和repo不包含任何業務邏輯(通常每個應用都非常具體),那麼您可以更輕鬆地在其他項目中重用這些類,而無需進行太多清理。

+0

但是使用服務類我不能在模板中調用$ product-> calculatePrice()。想象一下,你想打印一個簡單的產品列表,以反映產品收集的相關價格。 ¿是否將$ this-> get('product.service') - > calculatePrice($ procduct)調用爲foreach? ¿怎麼樣在{{product.calculatePrice}}中打印小枝模板中的計算價格? – smoreno 2012-07-13 22:55:41

+0

我不使用Twig,所以我道歉如果我在這裏錯了,但不能'注入'服務類的實例,然後從循環內調用它的方法?是否可以通過Twig模板助手代理服務類? – 2012-07-13 22:57:31

+0

是可能的擴展樹枝並創建一個函數calculatePrice()。稍後,您可以執行以下操作:{{product | calculatePrice()}}。當然,我需要將負責計算價格的服務注入到樹枝延伸課程中。謝謝。 – smoreno 2012-07-13 23:16:51