データモデルオブジェクトがありますUser
。私のアプリには、他にもいくつかのデータモデルオブジェクトがFork
ありOptions
ます。たとえば、ユーザーにはフォークとブランチがあります。私のアプリは、ユーザー/フォーク/オプションなどの情報を組み合わせて多くのクエリを実行する必要があります。たとえば、ユーザーのフォークのページを表示できます。これには、フォークでそのユーザー(セッションにログインしているユーザーなど)を結合するクエリが必要になります。
私はデメテルの法則に違反したくありません。また、一般的にゲッター(およびセッター)にも反対しているので、User::getID()
またはを実装したくありませんUser::getUsername()
。
しかし、代替案は私にはそれほど良くは思えません。結局起こったことは、User
これらのクエリを実行するためにさまざまなメソッドを実装することです(例User::getForks()
)。一般的にこれは機能しますが、User
クラスはモノリシックになり、それ自体が悪いです。
さらに、2つのデータモデルオブジェクトのクエリをどのように解決するかがわかりません。たとえばUser
、IDを持つaとIDを持つaFork
があり、フォークがユーザーに属していることを確認したい場合があります。これにはFork
、IDをユーザーに公開するUser
か、IDをに公開するかFork
、または両方がIDをコントローラー(またはその他)に公開する必要があります。これらはどれも望ましいとは思えず、どちらを選択すればよいかわかりません。私が見逃している他の選択肢はありますか?
別の同様の手順で、ビューに情報を追加するための最良の方法がわかりません。私はビューオブジェクトを持っており、通常は、のようなメソッドを使用します。このメソッドは、1User::addForksToView(View $view)
つまたは複数のクエリを実行し、いくつかの処理を実行しますが、これにより、のサイズと責任も増大しUser
ます。これも同様の問題だと思います。