人们通常反对使用公共静态方法,因为很难嘲笑它们(我不赞成这种流行)。
这归结为设计,你想让他们的职位成为你班的一部分吗?如果您将它添加为“copy”构造函数,那么它现在将成为类的一部分,并且依赖于对post的更改。如果他们改变了他们的职位,你的代码必须适应。
更好的解决方案是将其解耦。您需要找到一些扩展方法来映射这两者。一种方法是使用静态生成器方法(如您所提到的),或者如果您想更进一步,一个更复杂的解决方案是将您想要的信息从他们的文章中提取到某种类型的泛型集合类中。然后创建一个接受该构造函数类的构造函数。这样,如果他们改变了他们的设计,那么你的类就不会改变,你所要做的就是更新从他们的post到它的泛型表示的映射。
public class MyPost{
public MyPost(ICollectionOfProperties props){
}
}
public static class TheirPostExtensions{
public static ICollectionOfProperties ExtractProperties(this TheirPost thePost){
return new CollectionOfProperties(){
A = thePost.PropA,
B = thePost.PropB
};
}
}
public class Example{
public Example(){
TheirPost tp = new TheirPost();
ICollectionOfProperties props = tp.ExtractProperties();
MyPost mp = new MyPost(props);
}
}