![](/img/trans.png)
[英]Which one is better ? (Best practice) Create New class or Add extension methods in C#?
[英]Which is better practice, one client instance for the class or one in each method?
假设我的客户端应用程序中有一个名为DataService
的类。 该类有许多方法可以调用WCF服务。
我想知道哪个是更好的做法:
要在类中创建WebServiceClient的实例,该实例在创建类的实例时初始化,并由方法使用,例如:
public class DataService { MyWebServiceClient client = new MyWebServiceClient(); public void Method1() { var v = client.Operation1(); ... } public void Method2() { var v = client.Operation2(); ... } }
或者,在类的每个方法中创建和初始化WebServiceClient的实例,例如:
public class DataService { public void Method1() { var client = new MyWebServiceClient(); var v = client.Operation1(); ... } public void Method2() { var client = new MyWebServiceClient(); var v = client.Operation2(); ... } }
还有第三个选项,即在类中声明并在每个方法中初始化:
public class DataService { MyWebServiceClient client; public void Method1() { client = new MyWebServiceClient(); var v = client.Operation1(); ... } public void Method2() { client = new MyWebServiceClient(); var v = client.Operation2(); ... } }
当你依赖于这样的另一个类时,通常最好将它的构造分开并传入(或者可能使用依赖注入)。 这使您的DataService类更容易测试,您可以更轻松地以这种方式模拟WebServiceClient。
考虑类似......
public class DataService
{
public DataService(MyWebServiceClient client)
{
.... //Assign it to a private var...
}
}
我将使用构造函数注入和每个类的一个实例,如:
public class DataService
{
IMyWebServiceClient _client;
public DataService(IMyWebServiceClient client)
{
_client=client
}
public DataService():this(new MyWebServiceClient())
{
}
public void Method1()
{
var v = _client.Operation1();
...
}
public void Method2()
{
var v = _client.Operation2();
...
}
}
我在旧应用程序中最常使用方法3。 但最近已经看到一些代码,你有对象声明,但实例化是由像Spring这样的框架完成的。 实例保存在容器内。 仍然在学习这个过程。
public class DataService
{
MyWebServiceClient client;
public void Method1()
{
var v = client.Operation1();
...
}
public void Method2()
{
var v = client.Operation2();
...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.