2015-10-13 12 views
5

mieć klasę tak:prywatnych statycznych pól w niewyspecjalizowanych klasie statycznej

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. to jest złe, że używam pole statyczne? Oczekiwano, że inne wystąpienia aplikacji będą używać tej samej ścieżki _application.
  2. Czy jest to przykład naruszenia zasady SRP (SOLID)? I powinienem wydobyć "odpowiedzialność za wdrożenie" na inne klasy?
+2

_To źle, że używam pola statycznego _ nope?. używasz go z właściwego powodu, jeśli inne instancje SomeApplication będą używać tej samej _someApplicationPath. –

+0

To pytanie powinno w rzeczywistości przejść do [Przeglądu Kodu] (http://codereview.stackexchange.com/). – t3chb0t

+0

@ t3chb0t Nie, to jest prośba o wyjaśnienia. Robimy recenzje, a nie objaśnienia w Code ** Review **. – Mast

Odpowiedz

2

To źle, że używam statycznego pola?

To zależy od tego, co go używasz: dla. W tym przypadku, ponieważ zmienić z metodą niestatyczną (Deploy()), to tak, prawdopodobnie jest źle. Jeśli powinna być taka sama dla wszystkich instancji, ustaw ją w statycznym konstruktorze lub własności (zakładając, że konfiguracja aplikacji ją ustawi).

Czy jest to przykład naruszenia zasady SRP (SOLID)?

Jakie są obowiązki tej klasy? Czy potrafisz wyodrębnić logicznie lub Deploy i Start ?

0

To źle, że używam pola statycznego? Oczekiwano, że inne wystąpienia aplikacji będą używać tej samej ścieżki _application.

Nie sądzę, że jest źle. Dopóki to pole jest prywatne, możesz go używać, jak tylko chcesz. Po prostu nie zmieniaj go po ustawieniu na wdrożenie.

Czy jest to przykład naruszenia zasady SRP (SOLID)? I powinienem wydobyć "odpowiedzialność za wdrożenie" na inne klasy?

Tak, definitywnie naprawiłbym go i oddzieliłby instalację od uruchamiania aplikacji. Aktualnie klasa robi więcej niż jedną rzecz, to uruchamia proces i wdraża aplikację:

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; 
    } 
} 
Powiązane problemy