しばらく前にこの質問をしましたが、現在、データベース アクセス レイヤーとドメイン レイヤーを実際に分離する方法を検討しています。また、ビジネス ロジックをそれが属するドメインに移動し、コントローラー スクリプトから除外する作業も行う予定です。
データ アクセス レイヤーにテーブル データ ゲートウェイと行データ ゲートウェイ パターンを実装する Zend Framework を使用していますが、データ アクセス レイヤーとは別のドメイン レイヤーを構築する方法を実際に定義できていないようです。ドメイン ロジックがデータ アクセス ロジックと共存する Active Record パターンの使用を検討しましたが、次のような状況が少なくとも 1 回は発生し、Active Record では処理できないと思います。
person_id および userType フィールドを含む単一のテーブル「Person」があります。
各 userType (管理者、バイヤー、アソシエイト、スーパーバイザー) には、関連付けられた特定のビジネス ロジックがあり、すべてのタイプは Person オブジェクトからいくつかの基本機能を継承します。
特定の 1 つのタイプのユーザーだけに属するビジネス ロジックを使用して行データ ゲートウェイ オブジェクトを肥大化させたくはありませんが、さまざまなタイプのユーザーを表すドメイン層を構築する方法がわかりません。たとえば、PersonGateway オブジェクトを含む Person オブジェクトを作成してから、ゲートウェイ オブジェクトに呼び出しを渡すラッパー関数を作成するか、または Person オブジェクトを作成して PersonGateway オブジェクトを拡張し、必要な特定の関数のみを実装するか?
同様に、私は通常、これは (部分的に) ファクトリの問題であり、userType に基づいて正しいサブクラスをインスタンス化するファクトリ メソッドが必要であると考えています。Zend Framework の Zend_Db クラスを使用する場合、これが依然として最良の方法ですか?
Zend_Db の上にドメイン モデルを適切に作成する方法について説明しているチュートリアルへの提案やリンクは大歓迎です。