我正在进行TDD项目,所以我尝试尽可能地坚持与这种开发相关的良好实践。其中之一是尽可能避免静态和全局。
我面临着这个问题:我有一个对象“文章”,可以将其链接到“选项”(附加的“微型文章”)。
我无法弄清楚如何拥有一种不会产生反效果或产生过多查询的好的方法,因为我将处于一种一切都分离的情况下,我基本上将需要对每个对象进行一次查询。
从我的实际角度来看,我看到3个选项:
1)构建内部文章:
class Article
{
//[...]
public function getArrOption(){
//Build an array of Options instance.
//return an array of Options.
}
}
优点:直截了当
const:可维护性: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());
优点: Article只处理自己的责任,不关心他与选项的“父亲”链接。事情真的脱钩了
const:每次我需要访问Options时,Controller内都需要更多代码。这意味着我永远都不要在对象内部使用Factory,而这对我来说似乎是个主题。
最好的方法是什么?(我错过了什么吗?)谢谢。
编辑:
更不用说如果我不能在类内部调用工厂,那么我基本上也永远不会使用惰性初始化模式...