Должен ли я возвращать классы POCO из BLL в многоуровневой архитектуре с использованием Entity Framework? (Требуется руководство по архитектуре)

Я, вероятно, слишком много читал и страдаю от некоторой информационной перегрузки. Так что я был бы признателен за подробное руководство.

Из того, что я собрал, я могу использовать штуку с шаблоном T4 VS2010 для создания классов POCO, которые не привязаны напрямую к EF. Я бы поместил их в их собственный проект, в то время как мой DAL будет иметь класс, производный от ObjectContext, верно?

Когда у меня есть эти классы, приемлемо ли использовать их на уровне пользовательского интерфейса? То есть, скажем, одним из сгенерированных классов является BookInfo , который содержит информацию о книгах для публичной библиотеки (название, издание, страницы, резюме и т. д.).

Мой BLL будет содержать класс BooksBLL ] например так:

public class BooksBLL
{
    ObjectContext _context;

    public void AddBook(BookInfo book) { ... }
    public void DeleteBook(int bookID) { ... }
    public void UpdateBook(int bookID, BookInfo newBook) { ... }

    //Advanced search taking possibly all fields into consideration
    public List<BookInfo> ResolveSearch(Func<BookInfo, bool> filter) { ... }

    //etc...
}

Итак, мои модели просмотра в моем приложении пользовательского интерфейса MVVM будут взаимодействовать с указанным выше классом BLL и обмениваться экземплярами BookInfo. Это нормально?

Кроме того, сообщения MVVM в Интернете предлагают реализовать IDataErrorInfo для целей проверки. Можно ли реализовать указанный интерфейс в сгенерированном классе POCO? Из примеров я вижу, что эти сгенерированные классы POCO содержат все виртуальные свойства и информацию, и я надеюсь, что добавление моей собственной логики будет приемлемым?

Если это имеет значение, в настоящее время мое приложение не использует WCF (или какие-либо сетевые компоненты) .

Кроме того, если вы видите что-то ужасно неправильное в том, как я пытаюсь построить свой BLL, пожалуйста, не стесняйтесь предложить помощь и в этой области.

Обновление (дополнительная информация по запросу):

Я пытаюсь создать приложение для автоматизации библиотеки. В настоящее время это не сеть.

Я думаю о следующих уровнях:

  • Проект, состоящий из сгенерированных классов POCO (BookInfo, Author, Member, Publisher, Contact и т. Д.)
  • Проект с классом, производным от ObjectContext (DAL?)
  • Уровень бизнес-логики с классами, подобными упомянутому выше (BooksBLL, AuthorsBLL и т. Д.)
  • Уровень пользовательского интерфейса WPF, использующий шаблон MVVM. (Отсюда мой подвопрос о реализации IDataErrorInfo.)

Поэтому мне интересно, например, об использовании экземпляра BooksBLL в классе ViewModel, вызов ResolveSearch () на нем, чтобы получить List и представить его ... то есть повсюду использовать классы POCO.

Или мне следует иметь дополнительные классы, которые зеркалировать классы POCO, представленные в моем BLL?

Если требуются дополнительные подробности, спросите.

8
задан ForeverLearnNeverMaster 22 July 2012 в 15:51
поделиться