Я только что открыл методы расширения, и я их так сильно люблю, что боюсь за их хорошее использование ...
У меня есть 3-уровневое приложение Asp Net.Мой DAL основан на Entity Framework, мой пользовательский интерфейс - aspx-страницы, и моя бизнес-логика раньше была общими классами с LINQ для запросов сущностей, подобных этому:
public List<Site> GetAll()
{
return db.Sites.Include(s=> s.City).ToList();
}
, которые необходимо создать и использовать следующим образом:
CSite objsite = new CSite();
List<Site> sites = objsite.GetAll();
Затем я обнаружил Iqueryable, поэтому таким образом я могу «повторно использовать» свои запросы следующим образом:
public ObjectQuery<Site> GetAll()
{
return db.Sites.Include(s=> s.City);
}
public IQueryable<Site> Filter(IQueryable<Site> query, string filterWord)
{
return (from s in query
s.Name.Contains(word)
select s);
}
List<Site> sites = objsite.Filter(objsite.GetAll(),"filter word").ToList();
Метод Filter () просто применяет предложение where к GetAll() iqueryable, и это здорово, пока я не обнаружил методы расширения, поэтому я могу справиться с этим так:
public static IQueryable<Site> Filter(this IQueryable<Site> query, string word)
{
return (from s in query
s.Name.Contains(word)
select s);
}
И это даже лучше, потому что теперь у меня есть intellisense для моих запросов, таких как:
List<Site> sites = objsite.GetAll().Filter("filter word").ToList();
Теперь, это та часть, где я боюсь, и из-за трех вещей:
Как вы думаете, это хороший подход к n-уровневому приложению?Это хороший шаблон проектирования или просто ленивое решение?
Учитывая требование, чтобы методы расширения были статическими методами в статических классах, мой бизнес-уровень был бы полностью статичным, если бы этохороший подход ?, долженЯ положил методы без расширения под тот же статический класс?(например, GetAll () или AddNew ())
Быть приложением Asp Net - хорошо ли иметь все эти статичные вещи?
Спасибомного ребят!