2015-10-13 18 views
5

avere una classe come questa:campi statici private in classe non statica

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 
    } 
} 
  1. È male che sto usando un campo statico? È previsto che altre istanze di Applicazione utilizzeranno lo stesso _applicationPath.
  2. Si tratta di un esempio di violazione del principio SRP (SOLID)? E dovrei estrarre "ripiego della distribuzione" in un'altra classe?
+2

_Sono male che sto usando un campo statico? _ No. lo stai utilizzando con la ragione corretta se altre istanze di SomeApplication utilizzeranno lo stesso _someApplicationPath. –

+0

Questa domanda dovrebbe effettivamente andare a [Code Review] (http://codereview.stackexchange.com/). – t3chb0t

+0

@ t3chb0t No, questo è chiedere spiegazioni. Facciamo recensioni, non spiegazioni a Codice ** Recensione **. – Mast

risposta

2

È un problema che utilizzo un campo statico?

Dipende da cosa lo stai utilizzando per. In questo caso, dal momento che tu cambia con un metodo non statico (Deploy()), allora sì, probabilmente è male. Se dovrebbe essere uguale per tutte le istanze, impostarlo in un costruttore o una proprietà statica (supponendo che la configurazione dell'applicazione lo imposti).

Si tratta di un esempio di violazione del principio SRP (SOLID)?

Quali sono le responsabilità di questa classe? Puoi estrarre lo Deploy e il Start logicamente o uno richiede l'altro?

0

È un problema che utilizzo un campo statico? È previsto che altre istanze di Applicazione utilizzeranno lo stesso _applicationPath.

Non penso che sia male. Finché questo campo è privato puoi usarlo come vuoi. Basta fare attenzione a non cambiarlo dopo averlo impostato sulla distribuzione.

Si tratta di un esempio di violazione del principio SRP (SOLID)? E dovrei estrarre "ripiego della distribuzione" in un'altra classe?

Sì, lo definirò di nuovo e lo separerò dall'esecuzione dell'applicazione. Attualmente la tua classe fa più di una cosa, esegue il processo e distribuisce l'app:

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; 
    } 
} 
Problemi correlati