Я, наверное, слишком много читал и страдаю от некоторой информационной перегрузки. Так что я был бы признателен за подробное руководство.
Из того, что я собрал, я могу использовать шаблонную штуку VS2010 T4 для создания классов 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...
}
Итак, мои модели ViewModels в моем приложении пользовательского интерфейса 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<BookInfo>
и его представление ... то есть использование классов POCO повсюду.
Или мне следует иметь дополнительные классы, которые отражают классы POCO, представленные в моем BLL?
Если вам нужна дополнительная информация, спрашивайте.
IDataErrorInfo
. Этот интерфейс представляет собой простой контракт отSystem.ComponentModel
для сообщения о состоянии объекта модели. Он не имеет прямого отношения к пользовательскому интерфейсу, хотя в основном используется в этом контексте. Если вы отказываетесь внедрять его в классы POCO, вам придется заплатить цену дополнительной сложности. Вы не можете оправдать более высокую цену только за счет дизайна и пуризма шаблонов (если, возможно, вы не пишете код как художник). - person Slauma   schedule 12.04.2011