2015-04-22 12 views
5

Niedawno przeprowadziłem dyskusję z kolegą na temat tego, czy repozytorium w aplikacji sieciowej (w tym przypadku warstwa na szczycie Entity Framework) powinno być zaimplementowane jako klasa statyczna lub niestatyczna.Repozytorium jako klasa statyczna lub niestatyczna?

W tym pytaniu nie jestem zainteresowany, jeśli jedna lub druga implementacja jest lepszym (OOP) projektem, ponieważ to sprawiłoby, że odpowiedzi byłyby subiektywne.

Co mnie interesuje: Czy podczas porównywania statycznego z klasą niestatyczną jest instancją i utylizacją obiektu Entity Framework DbContext traktowanego w inny sposób w środowisku CLR? Jestem szczególnie zainteresowany problemami wielowątkowymi i wykorzystaniem pamięci, ponieważ ten kod działa w aplikacji sieciowej MVC.

Edit: prostu do wyjaśnienia: nie jestem zainteresowany unieszkodliwiania lub zbierania śmieci klasy repozytorium, tylko to, co dzieje się z lokalnym zmiennej context. Czy słusznie jest powiedzieć, że podczas powrotu metody jest zbierane śmieci (lub przynajmniej oznaczone jako śmieci)?

statyczne repozytorium

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... 
      }; 
     } 
    } 
} 

niestatycznych repozytorium

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

Mogę się mylić, ale w jaki sposób zbieranie/usuwanie śmieci ma zastosowanie do statycznych członków? Nigdy nie są usuwane/pozbywane się. – Veverke

+0

Elementy statyczne są przechowywane na sterty o wysokiej częstotliwości, a sterty nigdy nie są zbliżane przez GC. –

Odpowiedz

3

Jedyna różnica pomiędzy wywołaniem metodą statyczną oraz metodą przykład, że statyczne metody wykorzystać jeden mniej parametr : referencja this, która jest przekazywana do metod instancji. A ponieważ DbContext jest przechowywany w zmiennej lokalnej w obu przypadkach, można swobodnie zbierać śmieci, gdy metoda kończy się tak czy inaczej. Nie ma różnicy.

To wciąż nie jest wymówka, aby użyć statycznego repozytorium IMHO. Dobry kontra lepszy projekt może być subiektywny. Dobry czy zły projekt nie jest. SoC i SRP też nie są.

Powiązane problemy