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)=审查、编程的示例吗