4

グッドプラクティスでは、エンティティを軽く、ゲッターとセッターのみにすることを読みました。しかし、たとえば、いくつかのロジックを備えたカスタムメソッドがあります。

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 }}
4

1 に答える 1

11

エンティティに関連するビジネス ロジックを Service クラス内に配置するのが好きです。IMO、エンティティ リポジトリは、エンティティ グループの複数のアイテム、または非常に具体的な「findBy」メソッド (例: whereMessagesに属するすべてをフェッチ) について DB にクエリを実行することのみを担当する必要があります。UserisRead = 0

多くの場合、ビジネス ロジックの特定のブロックを処理するために複数のサービス クラスを使用していることに気付くでしょう。これらすべてをリポジトリに押し込むよりも、サービス レイヤーに保持する方が簡単 (かつクリーン) です。

ビジネス ロジックにサービスを使用すると、よりモジュール化されたコードになります。エンティティとリポジトリにビジネス ロジックが含まれていない場合Product(通常、アプリごとに非常に具体的です)、クリーンアップを行うことなく、他のプロジェクトでこれらのクラスをより簡単に再利用できます。

于 2012-07-13T22:42:42.783 に答える