当您拥有属性依赖于Web服务调用的类时,最佳设计实践是什么?

Set*_*man 7 .net c# oop design-patterns

如果我有一个具有一些只读属性的类,这些属性由Web服务调用填充,那么设计它的最佳方法是什么?

对于属性获取者来说,进行Web服务调用是否合适?看起来这样做的缺点是,吸气剂不仅仅是一件事而且掩盖了呼叫的费用.我意识到任何属性getter只需要调用一次Web服务(通过在调用之前检查空值或标志).但是,单个属性getter可能会为其他属性设置私有字段似乎闻到了我的味道.

另一方面,如果我有一个调用Web服务并更新私有字段的公共方法(即InitWebServiceVals),我将在方法和属性getter之间创建时间依赖关系.因此API模糊了在调用"InitWebServiceVals"之前不应读取属性的事实.

或者是否有其他方法或模式来解决这个问题?例如,在构造函数中调用webservice?或者这通常表明设计问题?

我已多次遇到这个问题而且我总是更喜欢第二种方法到第一种方法.

有什么想法吗?

赛斯

JMa*_*sch 8

我会向你抛出另一个选择.您可以使用工厂(类或静态方法)来实例化您的类.工厂将负责进行Web服务调用并将属性值移交给类(通过类中接受值的参数化构造函数,或通过将setter声明为内部).

这将有一个额外的好处,即从类本身中解耦"我的类如何获得这些值"部分.

所以:

var myClass = MyClass.Create(); // where create is a static
// or
var myClass = MyClassFactory.Create(); // using a separate factory
// or
var myClass = MyClass.CreateFromTestData(value1, value2, value3); // etc
Run Code Online (Sandbox Code Playgroud)