Здравствуйте, stomsky, Вы писали:
S>Привет всем!
S>Вопрос у меня прежде всего к gandjustas, IB и пр. сторонникам анемичной модели с навигационным доступом (под этими терминами понимаю этоАвтор: IB
Дата: 29.05.09
). Хотя, буду рад услышать доводы всех, кто захочет ответить.
S>Когда речь идет о стыке бизнес логики (BLL) с хранилищем данных (включая все промежуточные слои типа Репозитория, DAL и т.п.), то тут я скорее на стороне упомянутых выше участников форума.
S>Но когда речь идет о стыке представления (PL) и бизнес логики (BLL), то тут меня охватывают сомнения: модель работы с данными более естественна для GUI и при этом совместима с Transaction Script?
S>Как правильнее организовать представление составных сущностей на клиенте, сервере и передачу их с BLL на PL?
S>Уточню реализацию: клиент — WinForms в перспективой перехода на WPF, сервер — WinService на C#, транспорт — WCF.
Совершенно не понял причем тут anemic\rich\ещечтото.
Когда работаешь с данными то нужны 4 операции: чтение, добавление, изменение, удаление. Для выполнения этих операций используются запросы. Не важно будет у тебя SQL Server или WCF-сервис.
Но, для целей UI удобен databinding, поэтому нужно данные как-то материализовывать в коллекции, которые потом будут байдиться. Кроме того нужен change-tracking, чтобы потом изменения в данных можно было превратить в запросы на сервер. Также в сложном UI может понадобится иметь не список объектов, а некоторую более сложную коллекцию, содержащую объекты разных типов.
То есть для UI c databnding тебе нужны: данные + change-tracking + как-то хранить множество объектов
разных типов.
Из того что есть
1)Self tracking entities для EF — данные передаются графом связных объектов, нельзя просто предать несколько графов нельзя, changeset получить сложно
2)DataSet — строкотипизировано, неудобно
3)WCF Data Services — почти то что нужно, немного геморройно с навигационными свойствами работать
4)RIA Services — не сильно разбирался как оно в коде работает
Ну или можно самому написать, хотя я бы не рекомендовал.
Далее binding:
1)Для WinForms надо использовать что-то вроде
BindingSource bs1 = new BindingSource(Persons, null);
BindingSource bs2 = new BindingSource(bs1, "Parents");
// bind to grid
dataGridView1.DataSource = bs1;
dataGridView2.DataSource = bs2;
IEditableObject лучше не юзать ибо надо отслеживать изменения нескольких объектов.
2)В WPF все проще — в байндингах поддерживается навигация, INotifyPropertyChanged не сильно нужен, потому что объекты будут правиться в интерфейсе.
3)В вебе не будет байндинга. В вебе проще преобразовывать входящий запрос в запрос к хранилищу.