2011-08-10 9 views
1

私はモデルの正しい使い方を理解する方法に苦労しています。現在私はDb_Tableの継承を直接使用し、そこにすべてのビジネスロジックを宣言します。私はそれが正しい方法ではないことを知っています。ZFモデルが正しい使用

1つの解決策はDoctrine ORMを使用することですが、これは学習曲線を必要とし、現在のすべてのコンポーネントをpaginatorとauthに書き換える必要があります。また、Doctrine1は、ロードする必要があるさらに別のクラスを追加します。

私が見てきた最もクリーンな実装は、いわゆるモデルとDbTabelの間のデータマッパークラスを使用することです。私はまだこれを実装していないので、別のORMを書いているようです。しかし、例は、何かこのことができます:SQLのテーブルのユーザー

  • ここセッター、ゲッター、ビジネスロジック/model/User.php
  • データマッパー/model/mapper/UserMapper.phpを持つクラスを作成し、 funcionalityは基本的にすべての更新を記述し、ここにアクションを保存します。
  • データソース/model/DbTable/User.phpはDb_Table_Abstract

問題を拡張し、他のモデルとの間の関係です。

答えて

1

私のモデルはDb_Tableを拡張していますが、代わりに合成を使用すると有益です。つまり、私のモデルは「Db_Table」ではなく「Db_Table」を持っています。

このようにして、同じモデルで複数のテーブルを参照するほうがずっと簡単です。これは共通の要件です。これは単純なプロジェクトには十分です。私は現在、より複雑なアプリケーションを開発しており、Data Mapperパターンを使用しており、私が信じていたよりもコードを単純化していることがわかりました。

具体的には、データベースへのすべてのアクセスを提供し、getUser()などのメソッドを公開するクラスを作成しました。そのように、DBが変更された場合やクライアントがXMLにレコードを格納したり、サーバーや何かを分割すると、1つのクラスだけを書き直す必要があります。

私のモデルはこのクラスを拡張せず、そのインスタンスを構築中にプロパティとして割り当てます。

0

「正しい」方法は状況によって異なります。 YAGNIとKISSの原則に従えば、長い目で見れば、あなたが実際にあなたに利益をもたらすと本当に信じていない限り、あなたのモデル設定を複雑にするのは良いことではありません。

開発しているアプリケーションは何ですか? Db_Tableを元に戻すあなたの現在の設定はどうですか?

+0

あなたは正しいです、私が開発したアプリケーションは、ブログやCMSに似ています。投稿にはコメント、ユーザー、タグがあります。主なことは、コンポーネント(モジュール、ユーザー、ニュース、ブログ、投票)を可能な限りモジュール化したいということです。また、プロジェクトでTDDを採用しなければならないため、モジュールを少し緩く結合する必要があります。 –

関連する問題