C# 非静态类中的私有静态字段
我有以下课程:C# 非静态类中的私有静态字段,c#,solid-principles,C#,Solid Principles,我有以下课程: class Application { private Process _process; private static string _applicationPath = string.Empty; public void Start(string arguments) { if (!File.Exists(_applicationPath)) Deploy(); _process =
class Application
{
private Process _process;
private static string _applicationPath = string.Empty;
public void Start(string arguments)
{
if (!File.Exists(_applicationPath))
Deploy();
_process = Process.Start(_applicationPath, arguments);
}
public void SomeMethod()
{
//method that manipulate _process
}
private void Deploy()
{
// copying, installation steps (takes some time) and assign _applicationPath
}
}
应用程序的其他实例将使用相同的\u applicationPath
李>
这是违反SRP原则的一个例子(固体)?我是否应该将“部署责任”提取到另一个类李>
我用的是静态场,这很糟糕吗
这取决于你用它做什么。在这种情况下,由于您使用非静态方法(Deploy()
)对其进行了更改,所以是的,它可能不好。如果所有实例都应该相同,那么在静态构造函数或属性中设置它(假设应用程序配置将设置它)
这是违反SRP原则的一个例子(固体)
这个班的职责是什么?您可以从逻辑上提取Deploy
和Start
,还是一个需要另一个
我用的是静态场,这很糟糕吗?预期应用程序的其他实例将使用相同的_applicationPath
我认为这并不坏。只要这个字段是私有的,你就可以随意使用它。只是要小心,不要在将其设置为部署后更改它
这是违反SRP原则的一个例子(固体)?我应该将“部署责任”提取到其他类
是的,我会明确地重构它,并将部署与运行应用程序分开。当前,你的类做的不止一件事,它运行流程并部署应用程序:
class Application
{
private Process _process;
private static string _applicationPath;
public void Start(string arguments)
{
var isDeployed = string.IsNullOrEmpty(_applicationPath);
if (!isDeployed)
{
var deployment = new Deployment();
_applicationPath = deployment.Deploy();
}
_process = Process.Start(_applicationPath, arguments);
}
public void SomeMethod()
{
//method that manipulate _process
}
}
class Deployment
{
private static string _applicationPath;
public string Deploy()
{
if (IsDeployed)
{
return _applicationPath;
}
// copying, installation steps (takes some time) and assign _applicationPath
return _applicationPath;
}
}
我用的是静态场,这很糟糕吗?不。如果某个应用程序的其他实例将使用相同的_someApplicationPath,您使用它的理由是正确的。这个问题实际上应该转到。@t3chb0t不,这是在要求解释。我们在代码评审时进行评审,而不是解释。@t3chb0t不在其当前的from中。这将作为示例代码结束。这是一个半回顾半问题:)OP询问此设计是否正确,以及为什么或如何工作:使用静态字段很糟糕?=审查;这是违反SRP原则(SOLID)=审查、编程的示例吗