|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
skyANAсостав структуру возвращаемых данных (проекцию).поправил ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 18:08 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
skyANA, ну не в словах дело просто есть принятые слова - обобщение, специализация, морфизмы и эти слова относятся не только к поведению, но структуре в ВИПРОС что то наподобие структурного ООП методы олучения специализации могут быть разными, могу наложиться структурные фильтры, фильтры на значения, фильтры на методы и события, на визуализацию и т.д., + добавление структурные, поведенческие (это как в прототипировании) назови как хошь ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 18:47 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
просто не надо для всего этого писать код (кроме собственного поведения) - вот в чем отличие ВИПРОС от других ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 18:48 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
ViPRos, ну классно. А что в ВИПРОСе выбрано в качестве ключа шардинга? Какая функция, правило определяет соответсвие сервера ключу? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 19:22 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
skyANAЯ просто хотел уточнить тот момент, что какие тут могут быть проекции? Ты просто преподносишь их как некий универсальный механизм. Именно, я преподношу их как универсальный механизм -- для чего? Отвечаю -- для выбора нужного среза данных. Что такое проекция? Это POCO объект с нужным набором полей, может включать в себя поля из одной или нескольких ORM Entity, целые объекты, вычисляемые поля и аггрегации. Механизм универсален потому, что IQueryable запрос на проекцию прозрачно транслируется в IQueryable для ORM, значит с ними можно работать как с полноценными Entity. Проекции хороши тем, что полностью убирают любые вопросы с eager/lazy loading, так как берут одним запросом 100% по факту всё, что указано в проекции. И не надо ничего нигде описывать. Проекции хороши тем, что проекций может быть сколько угодно много, а метод для получения данных -- всего один для каждого корня. Проекции не зависят от реализации репозитория -- за бортом может быть что угодно: EF, NHibernate, или что-то ещё, если они реализуют честный IQueryable провайдер. Проекции замечательно работают с OData, и в принципе с чем угодно. Это не фанатение и не любовь, а банальная практичность. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 19:41 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
hVosttskyANAЯ просто хотел уточнить тот момент, что какие тут могут быть проекции? Ты просто преподносишь их как некий универсальный механизм. Именно, я преподношу их как универсальный механизм -- для чего? Отвечаю -- для выбора нужного среза данных. Что такое проекция? Это POCO объект с нужным набором полей, может включать в себя поля из одной или нескольких ORM Entity, целые объекты, вычисляемые поля и аггрегации. Механизм универсален потому, что IQueryable запрос на проекцию прозрачно транслируется в IQueryable для ORM, значит с ними можно работать как с полноценными Entity. Проекции хороши тем, что полностью убирают любые вопросы с eager/lazy loading, так как берут одним запросом 100% по факту всё, что указано в проекции. И не надо ничего нигде описывать. Проекции хороши тем, что проекций может быть сколько угодно много, а метод для получения данных -- всего один для каждого корня. Проекции не зависят от реализации репозитория -- за бортом может быть что угодно: EF, NHibernate, или что-то ещё, если они реализуют честный IQueryable провайдер. Проекции замечательно работают с OData, и в принципе с чем угодно. Это не фанатение и не любовь, а банальная практичность.Это всё понятно. На практике у тебя как это выглядит? Метод сервиса (контроллера) возвращает IQueryable? Или как? Я так понял, ты пишешь пяток конкретных методов, которые принимают ограниченный набор параметров, ты их пихаешь в Where, в Select-е обозначаешь проекцию, соответсвующую логике того, что это за метод и вуаля. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 19:54 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
hVostt, и тебе ведь не сложно будет показать код решения задачи ТС с проекциями? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:05 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
skyANAЭто всё понятно. На практике у тебя как это выглядит? Метод сервиса (контроллера) возвращает IQueryable? Или как? Я так понял, ты пишешь пяток конкретных методов, которые принимают ограниченный набор параметров, ты их пихаешь в Where, в Select-е обозначаешь проекцию, соответсвующую логике того, что это за метод и вуаля. Очень грубый пример, метод интерфейса: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Конечно в реале это является частью механизма Object Query, туда же все параметры летят, и через интеленс получаем список доступных проекций. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:18 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
skyANAViPRos, ну классно. А что в ВИПРОСе выбрано в качестве ключа шардинга? Какая функция, правило определяет соответсвие сервера ключу? нет у меня пока масштабируемости такой на уровне приложения я воще то думал, что всякие датацентры сами умеют это без приложения ну если не умеют, то придтся написать сервис сопоставления (а ключ у меня ГУИД) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:19 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
как нить надо над этим поработать ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:20 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
skyANAhVostt, и тебе ведь не сложно будет показать код решения задачи ТС с проекциями? В самом простейшем случае: Код: c# 1.
Нетипизированная проекция. Это суть. Что-то большее давать без определнённой задачи -- глупо. А «хочу чтобы в Cart сразу был Person», извини меня -- не является задачей. Хоть убей. Непонятно чего в итоге хочет ТС и зачем, а я экстрасенсом не собираюсь работать. Всякие советы типа «используй Include», кроме того, что они плохи, они не призваны помочь ТС, а даны чисто на от....ись. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:22 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
hVostt, ну это все надо кодировать а в ВИПРОС - склонировал макротип, поменял пару полей, наложил какой нить фильтр и все ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:23 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
hVosttskyANAЭто всё понятно. На практике у тебя как это выглядит? Метод сервиса (контроллера) возвращает IQueryable? Или как? Я так понял, ты пишешь пяток конкретных методов, которые принимают ограниченный набор параметров, ты их пихаешь в Where, в Select-е обозначаешь проекцию, соответсвующую логике того, что это за метод и вуаля. Очень грубый пример, метод интерфейса : Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Не понял, что такое такое интерфейс в данном случае. Service - это класс бизнес-логики, или это gateway к сервису? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:24 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
ViPRoshVostt, ну это все надо кодировать а в ВИПРОС - склонировал макротип, поменял пару полей, наложил какой нить фильтр и все В любом случае надо кодировать. Чуть больше затрат на написание проекций, окупается затем тысячу раз сторицей. Макротипы со строковыми ключами? Увольте. Строгая типизированность и интеллисенс -- не собираюсь от этого отказываться Тем более проекции, являясь по сути обычными классами, также могут наследоваться, и вообще они очень хорошо кастомизируются. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:26 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
skyANAНе понял, что такое такое интерфейс в данном случае. Service - это класс бизнес-логики, или это gateway к сервису? А чего ещё? Класс бизнес-логики в данном случае. Как видишь, никакой зависимости от EF. Сервис в свою очередь работает с репой, и тоже без всякой зависимости от EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:28 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
ViPRos, И ещё, ORM Entity также могут выступать в роли проекции, в отдельных случаях можно делать так: Код: c# 1.
Получим Item со всеми потрохами (этакий bulk Include получается по сути) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:30 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
hVosttskyANAhVostt, и тебе ведь не сложно будет показать код решения задачи ТС с проекциями? В самом простейшем случае: Код: c# 1.
И EF интерпертирует это выражение в JOIN двух таблиц? Нетипизированная проекция. Это суть. Что-то большее давать без определнённой задачи -- глупо. А «хочу чтобы в Cart сразу был Person», извини меня -- не является задачей.Хм, ну а если нам надо получить Card для выполнения каких-либо действий над ней, для бизнес-логики? Не с анонимным же типом работать и не с типизированным DTO. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:30 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
hVostt, я мог бы сгенерировать полный набор "классов" но не увидел выгоду сейчас какой нить прикладной выхлоп ВИПРОС расширяется и клиентом и поставщиком ВИПРОС на автомате сливает изменения клиента и поставщика, при этом не надо ниче компилировать, переслать, установить и т.д. а с кодом были бы проблемы ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:30 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
skyANAНе понял, что такое такое интерфейс в данном случае. Service.GetAll() ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:31 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
hVostt Код: c# 1.
И EF интерпертирует это выражение в JOIN двух таблиц? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:31 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
ViPRoshVostt, я мог бы сгенерировать полный набор "классов" но не увидел выгоду сейчас какой нить прикладной выхлоп ВИПРОС расширяется и клиентом и поставщиком ВИПРОС на автомате сливает изменения клиента и поставщика, при этом не надо ниче компилировать, переслать, установить и т.д. а с кодом были бы проблемы Возможно. Но я ж всей ситуации не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:32 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
skyANAhVostt Код: c# 1.
И EF интерпертирует это выражение в JOIN двух таблиц? Да. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:32 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
hVosttskyANAНе понял, что такое такое интерфейс в данном случае. Service.GetAll()Service - это репозиторий? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:33 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
skyANAХм, ну а если нам надо получить Card для выполнения каких-либо действий над ней, для бизнес-логики? Не с анонимным же типом работать и не с типизированным DTO. Есть два пути: проекции могут мапиться также и обратно в Entity. Или для изменяющих запросов, берутся Entity. Я предпочитаю для изменения работать исключительно с Entity, а проекции только для получения данных, для отображения или передачи наружу. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:34 |
|
Связь один к одному EF Code First
|
|||
---|---|---|---|
#18+
skyANAService - это репозиторий? Нет, я же сказал, это сервисный класс бизнес-логики. Т.е. GetAll() это всё, что доступно текущему пользователю, а не всё вообще. В логика маппинга для проекции также в зоне ответственности бизнес-логики. Просто я упрощаю примеры. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2014, 20:37 |
|
|
start [/forum/topic.php?fid=17&msg=38799997&tid=1349680]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
155ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 251ms |
total: | 515ms |
0 / 0 |