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...
};
}
}
}
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
Elementy statyczne są przechowywane na sterty o wysokiej częstotliwości, a sterty nigdy nie są zbliżane przez GC. –