2015-10-13 15 views
5

Có một lớp học như thế này:lĩnh vực tĩnh tư nhân trong phi lớp tĩnh

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. Đó là xấu mà tôi đang sử dụng một trường tĩnh? Dự kiến ​​rằng các phiên bản ứng dụng khác sẽ sử dụng cùng một _applicationPath.
  2. Đây có phải là ví dụ về vi phạm nguyên tắc SRP (SOLID) không? Và tôi nên trích xuất "triển khai reponsibility" để lớp khác?
+2

_Đó là xấu mà tôi đang sử dụng trường tĩnh? _ Không. bạn đang sử dụng nó với lý do chính xác nếu các phiên bản khác của SomeApplication sẽ sử dụng cùng một _someApplicationPath. –

+0

Câu hỏi này thực sự nên đi đến [Code Review] (http://codereview.stackexchange.com/). – t3chb0t

+0

@ t3chb0t Không, đây là yêu cầu giải thích. Chúng tôi đánh giá, không giải thích tại Code ** Review **. – Mast

Trả lời

2

Thật tệ khi tôi đang sử dụng trường tĩnh?

Tùy thuộc vào những gì bạn đang sử dụng nó cho. Trong trường hợp này kể từ khi bạn thay đổi bằng phương thức không tĩnh (Deploy()), thì có, có thể là xấu. Nếu nó giống nhau cho tất cả các cá thể, sau đó đặt nó trong một hàm tạo hoặc thuộc tính tĩnh (giả định rằng cấu hình ứng dụng sẽ thiết lập nó).

Đây có phải là ví dụ về vi phạm nguyên tắc SRP (SOLID) không?

Trách nhiệm của lớp học này là gì? Bạn có thể trích xuất DeployStart một cách hợp lý hay không yêu cầu tài khoản còn lại?

0

Thật tệ khi tôi đang sử dụng trường tĩnh? Dự kiến ​​rằng các phiên bản ứng dụng khác sẽ sử dụng cùng một _applicationPath.

Tôi không nghĩ nó xấu. Miễn là lĩnh vực này là riêng tư, bạn có thể sử dụng nó tuy nhiên bạn muốn. Chỉ cần cẩn thận để không thay đổi nó sau khi bạn đã thiết lập nó khi triển khai.

Đây có phải là ví dụ về vi phạm nguyên tắc SRP (SOLID) không? Và tôi nên trích xuất "triển khai reponsibility" để lớp khác?

Vâng, tôi chắc chắn sẽ cấu trúc lại và tách riêng việc triển khai khi chạy ứng dụng. Hiện tại, lớp học của bạn hoạt động nhiều hơn một điều, nó chạy quá trình và triển khai ứng dụng:

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; 
    } 
} 
Các vấn đề liên quan