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

Ios 使用工厂类实例化一组相关的具体类,ios,dependency-injection,tdd,factory,Ios,Dependency Injection,Tdd,Factory,对于我目前正在从事的个人项目,我使用依赖注入和TDD作为开发的基础。我还使用factory类实现以下功能: 关注点分离:将对象创建的责任与应用程序逻辑代码分离。单点对象创建 使单元测试更容易,因为我可以模拟工厂创建的对象 连接:将某些依赖项/服务注入到它所创建的对象中,而不必让客户机代码参与 我理解工厂类通常应该负责实例化一个特定的类型,并且当在运行时动态创建不同类型的实现时,它的有用性变得非常明显,但是,我并不是专门为此目的使用工厂的;我的理由是上面列出的那些。为了避免过度使用,我没有为每

对于我目前正在从事的个人项目,我使用依赖注入和TDD作为开发的基础。我还使用factory类实现以下功能:

  • 关注点分离:将对象创建的责任与应用程序逻辑代码分离。单点对象创建
  • 使单元测试更容易,因为我可以模拟工厂创建的对象
  • 连接:将某些依赖项/服务注入到它所创建的对象中,而不必让客户机代码参与
我理解工厂类通常应该负责实例化一个特定的类型,并且当在运行时动态创建不同类型的实现时,它的有用性变得非常明显,但是,我并不是专门为此目的使用工厂的;我的理由是上面列出的那些。为了避免过度使用,我没有为每个类创建单独的工厂类,但我使用工厂类来实例化相关类的组,例如:

@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
@接口标记工厂:NSObject
/*
*使用指定的名称创建新标记
*/
-(id)createTagWithName:(NSString*)名称;
/*
*使用预选的标记创建新的标记viewcontroller。
*/
-(TagsViewController*)创建TagViewControllerWithSelectedTags:(NSArray*)selectedTags;
/*
*创建一个新的标记视图
*/
-(TagsView*)创建TagsView;
@结束
然后,如果某个特定类需要构造其他对象,我将负责这些对象的工厂类注入该类,以便将对象创建委托给该类

我的方法的缺点:

  • 工厂类可能与许多其他类高度耦合
  • 工厂等级可能违反单一责任原则
话虽如此,到目前为止,这种方法在可测试性和方便性方面对我来说非常有效,而不会过火,也不会被工厂类淹没

我的问题是

  • 这种使用工厂级的做法是否被视为不良做法,如果是,可能会造成什么危险/风险
  • 如果我的方法不好,那么在不创建大量工厂类的情况下,有什么更好的方法来实现我想要的呢
  • 谢谢。

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

    • 你的班级结构是什么
    • 你能提供你所选择的另一条路线吗 谈论使用更多工厂类
    您可能已经知道:最好的做法是不要在类本身内部构造类,而是使用工厂,有时在工厂内设置多个级别也是可以接受的做法

    如果你还没有看过米斯科的一些视频,那就试试吧。这显示了多层:

    我希望视频中的这一点是相关的。我为你扫描了大约10分钟,无法再靠近了:D但我在寻找他们说你是否有房子和门的地方。。如何构建两者?在一家工厂里,还是同时在工厂和门厂里


    哦,更好的链接:开始和一

    嗨,很抱歉延迟回复。回答您的问题:a)给定工厂创建的类仅通过它们所服务的函数相关,如我的示例中的标记。他们之间没有具体的等级制度;b) 另一种选择是让每个工厂类只用于创建一个特定类型(单一职责),但这意味着工厂类的激增,我希望避免这种情况。所以我只是想知道我将相关对象的创建集中到一个工厂类中的方法是否合适。谢谢你的链接,非常有用的信息:)np。如果您还有其他问题,请告诉我