【发布时间】:2014-01-09 05:05:27
【问题描述】:
对于我目前正在从事的个人项目,我使用依赖注入和 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
然后,如果特定类需要构造其他对象,我将负责这些对象的工厂类注入到该类中,以便将对象创建委托给。
我的方法的缺点:
- 工厂类可能与许多其他类高度耦合。
- 工厂类可能违反单一职责原则。
话虽如此,到目前为止,这种方法在可测试性和便利性方面对我来说效果很好,而且没有过火和被工厂类淹没。
我的问题是:
- 这种使用工厂类的做法是否被视为不好的做法,如果是,它可能带来的危险/风险是什么?
- 如果我的方法不好,在不创建大量工厂类的情况下实现我想要的更好的方法是什么?
谢谢。
【问题讨论】:
标签: ios dependency-injection tdd factory