【问题标题】:Use of factory Class to instantiate group of related concrete classes使用工厂类实例化一组相关的具体类
【发布时间】: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

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

我的方法的缺点:

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

话虽如此,到目前为止,这种方法在可测试性和便利性方面对我来说效果很好,而且没有过火和被工厂类淹没。

我的问题是

  1. 这种使用工厂类的做法是否被视为不好的做法,如果是,它可能带来的危险/风险是什么?
  2. 如果我的方法不好,在不创建大量工厂类的情况下实现我想要的更好的方法是什么?

谢谢。

【问题讨论】:

    标签: ios dependency-injection tdd factory


    【解决方案1】:

    对我来说似乎不错(只做了 1-2 年的 TDD,哈哈,但已经编程超过 12 年),但是我正确理解了你的选择,

    • 您的类层次结构是什么?
    • 你能提供你以前的其他路线吗 谈论使用更多的工厂类?

    您可能已经知道的事情:最好不要在自己内部构造类,而是使用工厂,有时在工厂内设置多个级别也是可以接受的做法。

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

    我希望视频中的位置是相关的。我为你扫描了大约 10 分钟,但无法靠近 :D 但我正在寻找他们说如果你有房子和门的地方.. 你如何建造两者?在房屋工厂中还是同时在 houseFactory 和 doorFactory 中?

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

    【讨论】:

    • 嗨,很抱歉延迟回复。回答您的问题:a)给定工厂创建的类仅通过它们所服务的功能相关,例如我的示例中的标记。它们之间没有特定的层次结构; b) 另一种选择是让每个工厂类只专门用于创建一种特定类型(单一职责),但这意味着我想避免的工厂类的激增。所以我只想知道我将相关对象的创建集中到一个工厂类中的方法是否合适。感谢您的链接,非常有用的信息:)
    • np。如果您还有其他问题,请告诉我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2021-11-27
    • 2011-08-21
    • 2016-11-14
    • 2018-12-15
    相关资源
    最近更新 更多