Re: Представление данных в PL в свете Rich, Anemic и пр.
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.01.11 20:05
Оценка:
Здравствуйте, 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)В вебе не будет байндинга. В вебе проще преобразовывать входящий запрос в запрос к хранилищу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.