|
MVVM без ORM
|
|||
---|---|---|---|
#18+
user7320, и для кого я выделял текст , спрашивается.Джош СмитДанные должны откуда-то приходить и где-то храниться. В этом приложении экземпляр класса CustomerRepository загружает и хранит все объекты Customer. Так получилось, что он загружает данные клиентов из файла XML, но вообще тип внешнего источника данных несущественен. Данные могу поступать из базы данных, веб-службы, именованного канала, файла на диске или от почтовых голубей : это просто не имеет значения. Если у вас есть объект .NET с данными, независимо от того, откуда они, шаблон MVVM может вывести эти данные на экран.Репозиторий реализует прозрачную работу с данными, которые чёрт знает как могут быть распределены. ORM этого не умеет, это тупо object-relational mapping c дополнительными плюшками. Вот скажите как реализовать простой репозиторий Джоша Смита, что загружает данные клиентов из файла XML, средствами EF? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 12:48 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
bdfyyЕсть проект написанный на связке: Delphi + FireBird. Написан по старинке, без ORM с прямыми запросами к БД в окнах. По разным причинам принято решение Delphi "сменить" на WPF от Микрософта. Базу трогать нельзя, совместимость. Пробовал натравить на базу EF он вешается, т.е. сгенерить до конца не может. Да и в сгенеренном много чего не хватает. Все усугубляется тем, что объекты хранимые в таблице могут выступать как схожими так и разными. Поясню: Есть таблица А и В. В таблице А хранится объект АА, в таблице В объекты ВА и ВВ. Объект ВА может быть контейнером для ВВ, но при этом объект АА может быть контейнером для обеих объектов ВА и ВВ. И с точки зрения объекта АА между объектами ВА и ВВ нет разницы. Причем объекты ВА и ВВ могут хранится в разных базах, которые могут редактироваться независимо в разных местах. Как натравить NHibernate на базу не понял. По любому понял (на моем уровне знания данных ОRM), что придется многое допиливать руками. По поводу клиента. Объекты ВА и ВВ могут быть соответственно отображены скопом, например в виде таблицы, или в виде зависимости какой нибудь графической схемой. Эти окна абсолютно не связаны с точки зрения использования. т.е. один клиент может редактировать только в одном окне, другой только в другом, а третий в обеих окнах сразу. Все это конечно упрощенно. Надеюсь, что нормально объяснил. Готов добавить пояснения еще. Спасибо.Что за A и B, предметная область что-ли секретная? Ну да ладно. То есть имеем некую древовидную (компонентную) структуру, когда узел (компонент) AA содержит в себе набор дочерних узлов (компонентов) BA и BB, или что означает "объект АА может быть контейнером для обеих объектов ВА и ВВ"? И Вы не озвучили проблему: какие механизмы не получается реализовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 12:59 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
skyANAuser7320, и для кого я выделял текст , спрашивается.Джош СмитДанные должны откуда-то приходить и где-то храниться. В этом приложении экземпляр класса CustomerRepository загружает и хранит все объекты Customer. Так получилось, что он загружает данные клиентов из файла XML, но вообще тип внешнего источника данных несущественен. Данные могу поступать из базы данных, веб-службы, именованного канала, файла на диске или от почтовых голубей : это просто не имеет значения. Если у вас есть объект .NET с данными, независимо от того, откуда они, шаблон MVVM может вывести эти данные на экран.Репозиторий реализует прозрачную работу с данными, которые чёрт знает как могут быть распределены. ORM этого не умеет, это тупо object-relational mapping c дополнительными плюшками. Вот скажите как реализовать простой репозиторий Джоша Смита, что загружает данные клиентов из файла XML, средствами EF? Да, я тут слишком узко понял. Согласен. Но если мы говорим только о случае, когда данные поступают из БД, то ORM этой БД может служить репозиторием же? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 13:22 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
Бизнес объект - класс, хранящий данные. Служба - класс, содержащий логику. Репозитарий - служба, имеющая типовой интерфейс, предназначенная для работы с бизнес объектами определённого типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 13:48 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
skyANAЧто за A и B, предметная область что-ли секретная? Визуальная разработка техпрограмм для контроллеров. Вроде наиболее известная в моей области: Квинт. skyANAТо есть имеем некую древовидную (компонентную) структуру, когда узел (компонент) AA содержит в себе набор дочерних узлов (компонентов) BA и BB, или что означает "объект АА может быть контейнером для обеих объектов ВА и ВВ"? Да, и далее узел (компонент) ВА содержит в себе набор дочерних узлов (компонентов) ВВ, и может содержать в себе узел (компонент) AA skyANAИ Вы не озвучили проблему: какие механизмы не получается реализовать? Как в идеале должна быть правильно организованна работа, без ORM. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Ничего не упустил? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 14:43 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
авторModel - хранит в себе фактически копию базы данных. должен ли содержать проверку данных, что-то типа IDataErrorInfo? У меня с этой штукой тоже проблемы идентификации. Если БД почти полностью моделирует предметную область - сущности и связи - то получается, что модель будет повторять эту БД. А тогда уже получается, что лучше не городить свою модель со связями, а использовать ORM от EF - там уже всё намоделировано в классах и связано наилучшим образом. Остаётся только расширить эту модель предметной области функциональностью (расчёты там и прочее) - и то, если этой функциональности не заложено в БД в виде там процедур или ещё чего - и вот вам нормальная модель из ORM. Я прав, нет? Ну реально нет смысла "хранить в себе копию БД". Насчёт IDataErrorInfo - я его применяю совместно с атрибутами. Ну, если брать того же Джоша Смита, то у него валидация происходит прямо в IDataErrorInfo, а у меня - в атрибутах. Я на этом форуме уже кучу тем по этой теме насоздавал. Там получается, что в конечном счёте с атрибутами медленнее (т. к. их приходится вытаскивать через рефлексию и всё такое), но с ними гораздо нагляднее, т. к. все ограничения на модель присутствуют прямо в начале её определения в компактном виде, и не где-то далеко внизу по коду, где там IDataErrorInfo реализован. Если пихать всю и сложную валидацию в IDataErrorInfo, то эта валидация превращается в простыню кода проверок, который трудно обозревать. А медленность атрибутов относительная - если атрибуты и валидация не задействованы во время интенсивных расчётов, а применяются, скажем, только во время ввода небольших данных пользователем, то их и с атрибутами можно быстро обработать без тормозов для пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 15:04 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
Сцуко, сколько же от 7320 букаф... Просто невозможно курить этот поток сознания ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 15:07 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
МСУСцуко, сколько же от 7320 букаф... Просто невозможно курить этот поток сознания У меня много проблем. Я пытаюсь их все сразу решить. Неуспеваю писать везде. А вообще да, Шахиджанян виноват... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 15:09 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
user7320МСУСцуко, сколько же от 7320 букаф... Просто невозможно курить этот поток сознания У меня много проблем. Я пытаюсь их все сразу решить. Неуспеваю писать везде. А вообще да, Шахиджанян виноват... Будь последовательными. Твою кашу потока сознания сложно осилить. Да и лень много читать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 15:21 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
user7320МСУСцуко, сколько же от 7320 букаф... Просто невозможно курить этот поток сознания У меня много проблем. Я пытаюсь их все сразу решить. Неуспеваю писать везде. А вообще да, Шахиджанян виноват... Будь последовательными. Твою кашу потока сознания сложно осилить. Да и лень много читать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 15:30 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
user7320У меня с этой штукой тоже проблемы идентификации. Если БД почти полностью моделирует предметную область - сущности и связи - то получается, что модель будет повторять эту БД. А тогда уже получается, что лучше не городить свою модель со связями, а использовать ORM от EF - там уже всё намоделировано в классах и связано наилучшим образом. Остаётся только расширить эту модель предметной области функциональностью (расчёты там и прочее) - и то, если этой функциональности не заложено в БД в виде там процедур или ещё чего - и вот вам нормальная модель из ORM. Я прав, нет? Ну реально нет смысла "хранить в себе копию БД".Не хочешь, не городи. Не видишь смысла, не храни. Когда через год наткнёшься на грабли, тогда и поймёшь. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 15:53 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
user7320МСУСцуко, сколько же от 7320 букаф... Просто невозможно курить этот поток сознания У меня много проблем. Я пытаюсь их все сразу решить...Купи книжку по DDD. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 16:00 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
skyANAuser7320У меня с этой штукой тоже проблемы идентификации. Если БД почти полностью моделирует предметную область - сущности и связи - то получается, что модель будет повторять эту БД. А тогда уже получается, что лучше не городить свою модель со связями, а использовать ORM от EF - там уже всё намоделировано в классах и связано наилучшим образом. Остаётся только расширить эту модель предметной области функциональностью (расчёты там и прочее) - и то, если этой функциональности не заложено в БД в виде там процедур или ещё чего - и вот вам нормальная модель из ORM. Я прав, нет? Ну реально нет смысла "хранить в себе копию БД".Не хочешь, не городи. Не видишь смысла, не храни. Когда через год наткнёшься на грабли, тогда и поймёшь. Приведите, пожалуйста, пример граблей? Ну нет у меня опыта, поэтому на мой взгляд это кажется логичным - не копировать одну и ту же схему в разные слои. Ну, вот, к примеру, схемка из ORM (вложение). ProductType там выглядит так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
А модель этой сущности будет выглядеть точно также, т. к. модель тоже должна иметь те же свойства. И ту же связь с Product, реализуемую... а почему бы не так же, как и в ORM? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 16:12 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
user7320Приведите, пожалуйста, пример граблей? Ну нет у меня опыта, поэтому на мой взгляд это кажется логичным - не копировать одну и ту же схему в разные слои. 1. Поменялся источник данных. Теперь сущности типа Product берутся из внешнего SOA. 2. Появилось требование ввести новый булевский атрибут Checked для выбора выбранных продуктов. 3. Сменили ORM. 4. Реализация наследования логики. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 16:16 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
user7320, а покажи как у тебя отображается ProductType в Object Browser. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 16:26 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
skyANAuser7320, а покажи как у тебя отображается ProductType в Object Browser. Это же POCO - он отображается так же, как и все другие классы, написанные "с нуля". Это если вы зависимости имели ввиду. Но на всякий случай показал во вложении. Не, ну, на крайняк же можно тупо скопировать этот класс себе в модель? Мне он кажется вполне подходящим для простой модели. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 19:10 |
|
MVVM без ORM
|
|||
---|---|---|---|
#18+
bdfyyskyANAЧто за A и B, предметная область что-ли секретная? Визуальная разработка техпрограмм для контроллеров. Вроде наиболее известная в моей области: Квинт. skyANAТо есть имеем некую древовидную (компонентную) структуру, когда узел (компонент) AA содержит в себе набор дочерних узлов (компонентов) BA и BB, или что означает "объект АА может быть контейнером для обеих объектов ВА и ВВ"? Да, и далее узел (компонент) ВА содержит в себе набор дочерних узлов (компонентов) ВВ, и может содержать в себе узел (компонент) AA skyANAИ Вы не озвучили проблему: какие механизмы не получается реализовать? Как в идеале должна быть правильно организованна работа, без ORM. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Dal может быть любым, в том числе и половные orm Ничего не упустил? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 21:23 |
|
|
start [/forum/topic.php?fid=17&gotonew=1&tid=1349926]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
9ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 9ms |
total: | 274ms |
0 / 0 |