2015-04-22 12 views
5

Gần đây tôi đã có một cuộc thảo luận với một đồng nghiệp về việc liệu một kho lưu trữ trong một ứng dụng web (trong trường hợp này là một lớp trên cùng của Entity Framework) nên được thực hiện như các lớp tĩnh hoặc không tĩnh.Kho lưu trữ là lớp tĩnh hoặc không tĩnh?

Trong câu hỏi này, tôi không quan tâm nếu một hoặc thực hiện khác là một thiết kế tốt hơn (OOP), bởi vì điều đó sẽ làm cho câu trả lời chủ quan.

Điều tôi quan tâm: Đang khởi tạo và xử lý Khung thực thể DbContext được xử lý theo cách khác trong CLR khi bạn so sánh tĩnh với lớp không tĩnh? Tôi đặc biệt quan tâm đến các vấn đề đa luồng và sử dụng bộ nhớ, vì mã này chạy trong một ứng dụng web MVC.

Chỉnh sửa: Chỉ cần làm rõ: Tôi không quan tâm đến việc xử lý hoặc thu gom rác thải của lớp lưu trữ, điều gì sẽ xảy ra với biến số địa phương context. Có đúng không khi nói rằng đó là rác được thu thập (hoặc ít nhất được đánh dấu là rác thu thập được) khi phương pháp trả về?

kho tĩnh

public static class AccountRepository 
{ 
    public static AccountModel GetAccountById(int accountId) 
    { 
     using (var context = new EntitiesContext()) 
     { 
      var account = context.Accounts.FirstOrDefault(a => a.Id == accountId); 
      if (account == null) 
      { 
       return null; 
      } 

      return new AccountModel 
      { 
       Id = account.Id, 
       Username = account.Username, 
       // etc... 
      }; 
     } 
    } 
} 

Non-static kho

public class AccountRepository 
{ 
    public AccountModel GetAccountById(int accountId) 
    { 
     using (var context = new EntitiesContext()) 
     { 
      var account = context.Accounts.FirstOrDefault(a => a.Id == accountId); 
      if (account == null) 
      { 
       return null; 
      } 

      return new AccountModel 
      { 
       Id = account.Id, 
       Username = account.Username, 
       // etc... 
      }; 
     } 
    } 
} 
+0

Tôi có thể sai, nhưng cách xử lý rác thải/rác thải áp dụng cho các thành viên tĩnh như thế nào? Họ không bao giờ được xử lý/bỏ đi. – Veverke

+0

Thành viên tĩnh được lưu trữ trên heap tần số cao và heap này không bao giờ được tiếp cận bởi GC. –

Trả lời

3

Sự khác biệt duy nhất giữa các cuộc gọi của một phương pháp tĩnh và một phương pháp dụ là phương pháp tĩnh sử dụng một tham số ít : tham chiếu this được chuyển đến các phương thức mẫu. Và kể từ khi DbContext được lưu trữ trong một biến địa phương trong cả hai trường hợp, nó là miễn phí để được thu gom rác khi phương pháp chấm dứt một trong hai cách. Không có sự khác biệt ở đó.

Vẫn không có lý do gì để sử dụng kho lưu trữ tĩnh IMHO. Thiết kế tốt và tốt hơn có thể chủ quan. Thiết kế tốt và xấu thì không. SoC và SRP cũng vậy.

Các vấn đề liên quan