下面的代码是否足够好,或者应该使用类似接口或抽象类的代码?
我有一些常见的代码,但我没有看到抽象类或接口的原因。
此外,没有办法告诉serviceClient来自BaseTask而不探索或悬停它。每个Task1和Task2中都有一些东西可以指示这个吗?
public class BaseTask
{
private string configValue1 = "abc";
private string configValue2 = "def";
public ServiceClient serviceClient = new ServiceClient(configValue1,configValue2);
}
public class Task1 : BaseTask
{
public void RunTask()
{
serviceClient.RunTask1();
}
}
public class Task2 : BaseTask
{
public void RunTask()
{
serviceClient.RunTask2();
}
}
public class BaseTask
{
private readonly string configValue1 = "abc";
private readonly string configValue2 = "def";
private readonly ServiceClient serviceClient = new ServiceClient(configValue1,configValue2);
public ServiceClient ServiceClient { get{ return serviceClient;} }
}
public class Task1 : BaseTask
{
public void RunTask()
{
ServiceClient.RunTask1();
}
}
public class Task2 : BaseTask
{
public void RunTask()
{
ServiceClient.RunTask2();
}
}
答案 0 :(得分:2)
从架构上讲,我只会将serviceClient
设为只读属性。从文体上来说,我会遵循.NET的正确套管约定:
private ServiceClient serviceClient = new ServiceClient(configValue1,configValue2);
public ServiceClient ServiceClient
{
get { return serviceClient; }
}
将RunTask
虚拟化也是有意义的,因为您显示的实现是相同的(并且它允许您在必要时在其他实现中覆盖它):
public virtual void RunTask()
{
serviceClient.RunTask1();
}
答案 1 :(得分:1)
如果单独创建BaseTask
的实例没有意义,那么将其设为抽象以防止任何人这样做。这也使你的意图明确(即BaseTask
只应来自)。
我还建议不要公开变量。而是将它们隐藏在属性后面。
答案 2 :(得分:0)
你现在没有任何属性。如果您需要特定值,请尝试以下操作。
public class BaseTask
{
private string _configValue1 = "abc";
private string _configValue2 = "def";
private ServiceClient _serviceClient1 = new ServiceClient(configValue1,configValue2);
Public ServiceClient ServiceClient1
{
get
{
return _serviceClient1;
}
set
{
serviceClient1 = value;
}
}
Public string ConfigValue1
{
get
{
return _configValue1;
}
set
{
_configValue1= value;
}
}
Public string ConfigValue2
{
get
{
return _configValue2;
}
set
{
_configValue2 = value;
}
}