【发布时间】:2012-04-26 19:41:50
【问题描述】:
如果我使用依赖注入模式来删除依赖项,它们最终会出现在其他地方。
例如,Snippet 1,或者我所说的 Object Maker。
我的意思是你必须在某个地方实例化你的对象......所以当你将依赖从一个对象中移出时,你最终会将它放到另一个对象中。
我看到这将我所有的依赖项合并到一个对象中。关键是要减少您的依赖关系,以便它们都驻留在一个(尽可能接近)位置吗?
片段 1 - 对象制作器
<?php
class ObjectMaker
{
public function makeSignUp()
{
$DatabaseObject = new Database();
$TextObject = new Text();
$MessageObject = new Message();
$SignUpObject = new ControlSignUp();
$SignUpObject->setObjects($DatabaseObject, $TextObject, $MessageObject);
return $SignUpObject;
}
public function makeSignIn()
{
$DatabaseObject = new Database();
$TextObject = new Text();
$MessageObject = new Message();
$SignInObject = new ControlSignIn();
$SignInObject->setObjects($DatabaseObject, $TextObject, $MessageObject);
return $SignInObject;
}
public function makeTweet( $DatabaseObject = NULL, $TextObject = NULL, $MessageObject = NULL )
{
if( $DatabaseObject == 'small' )
{
$DatabaseObject = new Database();
}
else if( $DatabaseObject == NULL )
{
$DatabaseObject = new Database();
$TextObject = new Text();
$MessageObject = new Message();
}
$TweetObject = new ControlTweet();
$TweetObject->setObjects($DatabaseObject, $TextObject, $MessageObject);
return $TweetObject;
}
public function makeBookmark( $DatabaseObject = NULL, $TextObject = NULL, $MessageObject = NULL )
{
if( $DatabaseObject == 'small' )
{
$DatabaseObject = new Database();
}
else if( $DatabaseObject == NULL )
{
$DatabaseObject = new Database();
$TextObject = new Text();
$MessageObject = new Message();
}
$BookmarkObject = new ControlBookmark();
$BookmarkObject->setObjects($DatabaseObject,$TextObject,$MessageObject);
return $BookmarkObject;
}
}
【问题讨论】:
-
问题的表达方式决定了你得到的答案,这真的很奇怪。
-
这篇文章语气相反——*.com/questions/10156341/…
标签: php oop design-patterns dependency-injection