2010-11-25 7 views
1

すべて同じクラス...Zend Frameworkに行セット、私は行クラスと結果を得るための基本クラスとして同じクラスを使用したいが、私はそれを間違った方法をやっていると思うだろう

すなわちZend_Db_Table_Row_AbstractZend_Db_Table_Abstractを拡張するには同じクラスが必要ですが、これは同じクラスに2つの異なるもののロジックを入れていると思いますか?

は、例えば、私は、基本クラスは、などの選択クエリを処理すべきだと思う...(と2が不可能である拡張)、および行クラスは、などの更新処理する必要があります。しかし、私は行くことができるようにしたい:

class Article extends BaseModel { //Set table name and some custom functions } 

BaseModel { //Define custom functions for finding rows and updating } 

Article::findAll() //This is table logic 

Article::insert($data); //This is row login 

これは正しい方法はありますか?

答えて

1

は、私はあなたがActiveRecord patternを探していると思う:

データベーステーブルまたはビュー内の行をラップするオブジェクトは、データベースへのアクセスをカプセル化し、そのデータにドメインロジックを追加します。

Zend_Db_ActiveRecordコンポーネントの提案がありますが、「新しい」段階は決して残っていません。提案にはいくつかのユースケースがありますが、あなた自身でそれを実装する方法をいくつか考えているかもしれません。また、Propelまたはphpactiverecord

Please be aware that ActiveRecord is often misused and has a number of drawbacks due to the violation of separation of concerns due to the intermingling of db access and business logic in one class.

+0

これは私が欲しいものであるように、既存のサードパーティのソリューションを使用することに興味があるかもしれませんZFはまだそれを開発していない恥。 – Ashley

0

これを行う正しい方法は、行(ある種のモデル)とテーブル(ある種のマッパー)の2つのクラスを持つことです。
なぜあなたはそれらを1つのクラスに入れたいですか?一緒に属していないものを分離することは、クラスの意図ではありませんか?
本当に同じクラスになりたい場合は、行クラスにメソッドgetTableを追加し、行クラスをテーブルクラスのアダプタに拡張します(これは私が強く推奨していません:)。

関連する問題