2012-01-10 10 views
6

私はZendプロジェクトで通貨変換に関するいくつかの機能を持っています。私はコントローラとモデルの機能を利用したいと思います。このコードをどこに置くのがベストプラクティスですか?それとも、両方の機能が両方の場所で使用されていて、おそらくプロジェクトの構造を再考して両方の場所で必要ではないというインジケータがあるということですか?コントローラーとモデル用に再利用可能なコードを置く場所

答えて

6

純粋主義者は、あなたがコントローラコードで通貨換算をしているのであれば、そこにはビジネスロジックが本当にあってはいけないと考えているかもしれないと主張します。しかし、時には実践的な考察が純粋主義よりも重要です。これがそのようなケースの1つであると仮定しよう。 :-)

あなたの通貨クラスがかなりシンプルなユーティリティタイプのクラスの場合は、 "utils"という名前の新しいディレクトリを作成し、そのディレクトリをアプリケーションのリソースローダーに追加します

protected function _initResourceLoader() 
{ 
    $this->_resourceLoader->addResourceType('utility', 'utils', 'Utility'); 
} 

次にあなたがそのディレクトリにCurrency.phpという名前のファイルに保存されているApplication_Utility_Currencyというクラスを作成して、のような静的メソッドを呼び出すことができます:ブートストラップヨーヨー場合は、このアプローチは特に有用であろう

Application_Utilility_Currency::convert($from_currency, $to_currency, $amount); 

を家を探していた他のユーティリティクラスもありました。

しかし、あなたの通貨クラスが豊富な機能(為替レートデータの取得などの外部サービスへの接続など)を含んでいる場合、IMOは、「ユーティリティ」ではなく「サービス」として扱うほうがよいでしょう"私の「モデル」の定義はかなり緩やかであり、そのデータがアプリケーションデータベースにあるかどうかにかかわらず、すべてのデータ関連サービスが含まれているため、クラスがより複雑なものであれば、モデル。

+0

ありがとうございました。言及したように、外部サービスに接続して新しいレートを取得するロジックもあります。したがって、おそらくモデルが最適です。他の場所で役に立つユーティリティ機能について知っておくとよいでしょう。 – user1140535

関連する問題