我的类应该具有带有私有setter的属性(或者与之关联的私有字段和只读属性)。如果我在这些类中有静态工厂方法来创建实例,这是可以的。然而,许多开发人员写道“静态工厂方法是架构黑洞”,因为继承静态方法是不可能的。
C#没有友好的类,因此我不能使用工厂来实现。
你对使用静态工厂方法有什么看法?
发布于 2011-05-04 17:17:59
默认情况下,我会通过将所需的参数传递给构造函数来创建实例。如果构造函数有很多参数,要么需要parameter object,要么违反了SRP。如果您有多种选择来创建依赖于参数的实例,并且逻辑并不复杂,那么静态工厂方法可能是将创建逻辑保留在类中的最佳方式。
如果您有复杂的实例创建规则,这些规则依赖于参数和其他因素,您可以使用工厂,可能是fluent工厂,它收集所有必需的参数并执行所需的逻辑,然后使用类公共构造函数来创建对象。
发布于 2011-05-03 23:10:37
类的所有只读依赖项都应该由此类型的构造函数注入。这使得代码更容易理解、调试,最重要的是更容易测试。所以,如果这是不可能的,那么你应该认真考虑你的类层次结构。如果您仔细遵循此原则,还可以使用依赖注入框架在运行时解决此依赖关系。
示例:
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.
} 发布于 2011-05-03 23:06:26
我不认为这句话:
C#没有友好的类,因此我不能使用工厂
是真的。
关键是不要在执行实现的类上创建静态工厂方法。在这里,您无法逃脱强耦合。
你可能想看看依赖注入/反转。您可以通过/code config设置对象的创建方式,而不必担心创建工厂;DI框架为您提供了工厂,并连接了您指定需要的任何依赖项。
https://stackoverflow.com/questions/5871473
复制相似问题