首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态工厂方法与工厂

静态工厂方法与工厂
EN

Stack Overflow用户
提问于 2011-05-03 22:58:19
回答 6查看 1.6K关注 0票数 2

我的类应该具有带有私有setter的属性(或者与之关联的私有字段和只读属性)。如果我在这些类中有静态工厂方法来创建实例,这是可以的。然而,许多开发人员写道“静态工厂方法是架构黑洞”,因为继承静态方法是不可能的。

C#没有友好的类,因此我不能使用工厂来实现。

你对使用静态工厂方法有什么看法?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-04 17:17:59

默认情况下,我会通过将所需的参数传递给构造函数来创建实例。如果构造函数有很多参数,要么需要parameter object,要么违反了SRP。如果您有多种选择来创建依赖于参数的实例,并且逻辑并不复杂,那么静态工厂方法可能是将创建逻辑保留在类中的最佳方式。

如果您有复杂的实例创建规则,这些规则依赖于参数和其他因素,您可以使用工厂,可能是fluent工厂,它收集所有必需的参数并执行所需的逻辑,然后使用类公共构造函数来创建对象。

票数 2
EN

Stack Overflow用户

发布于 2011-05-03 23:10:37

类的所有只读依赖项都应该由此类型的构造函数注入。这使得代码更容易理解、调试,最重要的是更容易测试。所以,如果这是不可能的,那么你应该认真考虑你的类层次结构。如果您仔细遵循此原则,还可以使用依赖注入框架在运行时解决此依赖关系。

示例:

代码语言:javascript
复制
class Foo : IFoo
{
    private readonly IBar bar;
    private readonly IBaz baz;

    public Foo(IBar bar, IBaz baz)
    {
        this.bar = bar;
        this.baz = baz;
    }

    // Readonly properties for bar and baz, if needed.
} 
票数 2
EN

Stack Overflow用户

发布于 2011-05-03 23:06:26

我不认为这句话:

C#没有友好的类,因此我不能使用工厂

是真的。

关键是不要在执行实现的类上创建静态工厂方法。在这里,您无法逃脱强耦合。

你可能想看看依赖注入/反转。您可以通过/code config设置对象的创建方式,而不必担心创建工厂;DI框架为您提供了工厂,并连接了您指定需要的任何依赖项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5871473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档