使用工厂类来实例化相关具体类的组

时间:2014-01-09 05:05:27

标签: ios dependency-injection tdd factory

对于我目前正在进行的个人项目,我使用依赖注入和TDD作为开发的基础。我还使用工厂类来实现以下目标:

  • 关注点分离:将对象创建的责任与应用程序逻辑代码分开。单点对象创建。
  • 使单元测试更容易,因为我可以模拟工厂创建的对象。
  • 接线:将某些依赖项/服务注入其创建的对象,而客户端代码不必担心这样做。

据我所知,通常工厂类应负责实例化一个特定类型,并且在运行时动态创建类型的不同实现时,它的实用性确实变得明显,但是,我并没有专门为此目的使用工厂。我的理由是上面列出的那些。为避免过度杀伤,我没有为每个类创建一个单独的工厂类,但我使用工厂类来实例化相关类的组,例如:

@interface TagsFactory : NSObject

/*
 * Create a new tag with the specified name
 */
-(id<Tag>) createTagWithName:(NSString*) name;

/*
 * Create a new TagsViewController with preselected tags.
 */
-(TagsViewController*) createTagViewControllerWithSelectedTags:(NSArray*) selectedTags;

/*
 * Create a new TagsView
 */
-(TagsView*) createTagsView;

@end

然后,如果某个特定类需要构造其他对象,我会将负责这些对象的工厂类注入到类中,以便将对象创建委托给。

我的方法的缺点:

  • 工厂类可能与许多其他类高度耦合。
  • 工厂类可能会违反单一责任原则。

话虽如此,到目前为止,这种方法在可测试性和便利性方面对我来说非常有效,而不会过分淹没工厂类。

我的问题是

  1. 这种工厂类别的使用是否被认为是不良做法,如果是这样,它可能带来的危险/风险是什么?
  2. 如果我的做法很糟糕,那么在不创造大量工厂类的情况下,实现我想要的更好的方式是什么?
  3. 感谢。

1 个答案:

答案 0 :(得分:1)

对我来说似乎很好(仅仅做了1 - 2年TDD,但是,编程超过12),但我正确理解你的选择,

  • 你的班级等级是什么?
  • 您能提供其他路线吗? 谈论使用更多工厂类?

你可能已经知道的东西:最好不要在自己内部构建类,而是使用工厂,有时可以在工厂内设置多个级别。

如果你还没有看到Misko的一些视频,请点击它。这显示了多层: https://www.youtube.com/watch?v=RlfLCWKxHJ0#t=804

我希望vid中的位置是相关的。我为你扫描了大约10分钟并且无法靠近:D但我正在寻找他们说如果你有房子和门的地方......你怎么建造两者?在一个房子工厂或两个房子工厂和门工厂?

哦,更好的链接:开始here和一个single build method