私はTDDプロジェクトに参加しているので、この種の開発に関係する優れた慣行に可能な限りこだわります。それらの1つは、静的およびグローバルを可能な限り回避することです。
私はこの問題に直面しています。「オプション」(追加の「マイクロ記事」)をリンクできるオブジェクト「記事」があります。
私はすべてが非常に切り離されているため、基本的にオブジェクトごとに1つのクエリを作成する必要があるため、非生産的であるか、あまり多くのクエリを生成しない良いアプローチを持つ方法を理解することはできません。
私の実際の観点から、3つのオプションがあります。
1)記事内のビルド:
class Article
{
//[...]
public function getArrOption(){
//Build an array of Options instance.
//return an array of Options.
}
}
プロ:まっすぐ進む
定数:保守性:articleオブジェクトには、Optionオブジェクトの構築ロジックが含まれるようになりました。これはおそらくコードの重複につながります。
2)optionFactoryを使用する
class Article
{
//[...]
public function getArrOption(){
return OptionFactory::buildFromArticleId($this->getId());
}
}
プロ:ロジックの構築はArticleクラスの外にありません
Const:「静的なモックは難しい」というルールを破り、Articleクラスのテストを難しくしています。
3)すべてのロジックを分離します。
//Build the array of Option instance in a controller somewhere, using a Factory:
$arrOption = OptionFactory::buildFromArticleId($article->getId());
プロ:記事は彼自身の責任のみを扱い、オプションへの彼の「父」リンクを気にしません。物事は本当に切り離されています
Const:オプションにアクセスする必要があるたびに、コントローラー内により多くのコードが必要になります。私がすべきことという意味では決してオブジェクト内の工場を使用していない、と私にutopicのその音の種類...
最善の方法は何ですか?(私は何かを見逃しましたか?)ありがとう。
編集:
言うまでもなく、クラス内でファクトリを呼び出せない場合、基本的に怠laな初期化パターンも使用できません...