我有一个类,为了完全填充其所有属性,它需要从服务器获取一些数据。
目前我在服务器的构造函数中调用了服务器,如下所示:
public class GeometryObject
{
public GeometryObject(string partName, CADFileType partType)
{
InitializeTransformParameters();
CreateDefaultInternalParameters();
CADFile = Server.GetCADFileAsync(partName, partType).Result; // not great having a time consuming action in the constructor but not sure how else to do this.
}
}
Server.GetCADFileAsync()
本质上是HttpClient.PostAsync()
的包装。
虽然这可行(只要调用成功!!),但它闻起来有点像一个糟糕的设计?这种事情通常是如何处理的?我正在使用 C#6。
我已经看到它完成了,但并不完全好。更常见的方法使用工厂方法,如下所示:
public class MyClass
{
// private constructor
private MyClasss() {}
public static MyClass Load()
{
// this method can call the constructor, because it's a member of the class
var result = new MyClass();
// populate required fields here
return result;
}
}
然后,您可以使用如下类型,而不是
new MyClass()
:
var myVariable = MyClass.Load();