Репозиторий как статический или нестатический класс?
недавно у меня было обсуждение с коллегой о том, должен ли репозиторий в веб-приложении (в данном случае слой поверх Entity Framework) быть реализован как статические или нестатические классы.
в этом вопросе меня не интересует, является ли та или иная реализация лучшим дизайном (ООП), потому что это сделало бы ответы субъективными.
то, что меня интересует: создание экземпляра и удаление Entity Framework DbContext
обрабатывается по-другому в среде CLR при сравнении статического с нестатическим классом? Меня особенно интересуют многопоточные проблемы и использование памяти, потому что этот код работает в веб-приложении MVC.
Edit: просто чтобы уточнить: меня не интересует утилизация или сбор мусора класса репозитория, просто что происходит с локальным context
переменной. Правильно ли говорить, что это карбаж, собранный (или, по крайней мере, помеченный для сбора мусора), когда метод возвращается?
статическое хранилище
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...
};
}
}
}
нестатический репозиторий
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...
};
}
}
}
1 ответов
единственное различие между вызовом статического метода и метода экземпляра заключается в том, что статические методы используют один параметр меньше:this
ссылка, которая передается методам экземпляра. И с тех пор DbContext
хранится в локальной переменной в обоих случаях, это бесплатно быть собранным мусор, когда метод завершается в любом случае. Никакой разницы.
Это все еще не повод использовать статический репозиторий IMHO. Хороший vs лучший дизайн может быть субъективным. Хороший против плохого дизайна нет. SoC и SRP тоже.