|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Доброго времени суток, уважаемые коллеги. Вопрос такой. На сколько оправдано использование в SQL-триггеров при подходе CodeFirst (EntityFramework Core) , при наличие вариантов, которые исключают какое-либо вмешательство в SQL сервер? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 10:29 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, Это чисто идеология как писать. Главное не смешивать. Можно бд считать импотентом и хранилищем данных. Остальное делает средний слой. Можно делать упор на бд как гарант целостности. Если триггер без БЛ то вообще нет проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 10:48 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Petro123, Так-то оно понятно, но интересует конкретный вопрос относительно миграции. Мешает или способствует? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 10:49 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, миграции? Вы о чём? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 10:51 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANA, DbMigration... CodeFirst (EntityFramework)... изменение классоа (схемы данных)... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 10:53 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaPetro123, Так-то оно понятно, но интересует конкретный вопрос относительно миграции. Мешает или способствует? Мешает). И мое маленькое imho что MS что то поменяет. Чтобы работали оба направления. Первична база и первичен АппСервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 10:57 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaВопрос такой. На сколько оправдано использование в SQL-триггеров при подходе CodeFirst (EntityFramework Core) , при наличие вариантов, которые исключают какое-либо вмешательство в SQL сервер? Абсолютно не оправдано. Что за варианты имеются в виду, можете озвучить? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:08 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaТак-то оно понятно, но интересует конкретный вопрос относительно миграции. Мешает или способствует? Не то, чтобы мешают. Но не способствуют, это точно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:09 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaskyANA, DbMigration... CodeFirst (EntityFramework)... изменение классоа (схемы данных)... It depends... К примеру мы выкатываем новую версию только на часть серверов и включаем только части пользователей. И какое-то время надо писать данные в оба места: новое и старое. Тут триггер помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:12 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANAТут триггер помогает. Слишком частный случай, а ТС пока не озвучил свои варианты использования. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:13 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Давайте я приведу конкретный пример, а за одно может чего посоветуете. Предположим, что у меня есть Computed Description свойство, мне надо хранить в нем, $"{Name} will pay you {Amount} of {CurrencyName}". При изменении в БД любого из свойств задействованных в выражении, хочется иметь "свежую" версию в свойстве Description. Какие будут предложения? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:20 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaДавайте я приведу конкретный пример, а за одно может чего посоветуете. Предположим, что у меня есть Computed Description свойство, мне надо хранить в нем, $"{Name} will pay you {Amount} of {CurrencyName}". При изменении в БД любого из свойств задействованных в выражении, хочется иметь "свежую" версию в свойстве Description. Какие будут предложения? Делать это в рамках приложения. Почему? Во-первых, сегодня вам нужен {Name}, который доступен из полей записи, а завтра нужно туда добавлять, допустим, имя текущего пользователя, который из триггера будет недоступен. Во-вторых, триггеры тяжело протестировать. В-третьих, вам может быть нужно одно поведение в одном окружении, и другое в другом (dev, staging, production...). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:24 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, На EF ваше Computed Description может быть легко реализовано с помощью свойства, но лучше, если это будет выполняться на уровне репозитория. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:25 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, Опять же. Это всё верно до тех пор, пока верно то, что с базой данных работает только приложение, и никто ручками в базу не лезет. Если это так, то мне тут посоветовать что-то трудно. Триггеры, конечно выглядят как решение, но по личному опыту, это не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:27 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
hVosttCalabonga, Опять же. Это всё верно до тех пор, пока верно то, что с базой данных работает только приложение, и никто ручками в базу не лезет. Если это так, то мне тут посоветовать что-то трудно. Триггеры, конечно выглядят как решение, но по личному опыту, это не так. В том-то и дело, и можно обойтись без триггера. Пока работает одно приложение (или несколько приложений), но работают они по одним правилам, то есть везде используется одна и та же функция формирования Description, то это всё работает. Но как только "ручками", кто-то править в БД будет, то триггер отработает, а без него Description будет "сломан" ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:36 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaНо как только "ручками", кто-то править в БД будет,именно. Бд предприятия это не твоя собственность. Либо делаете большой АппСервер и все ходят через него, либо... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:44 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Petro123, Я понял, спасибо всем. В общем-то, вы подтвердили мои предположения. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:47 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaВ том-то и дело, и можно обойтись без триггера. Пока работает одно приложение (или несколько приложений), но работают они по одним правилам, то есть везде используется одна и та же функция формирования Description, то это всё работает. Но как только "ручками", кто-то править в БД будет, то триггер отработает, а без него Description будет "сломан" Поэтому с базой должно работать одно приложение, а другие работать с данными через него. Это называется трёх-звенка . ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 11:48 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
hVosttCalabongaВ том-то и дело, и можно обойтись без триггера. Пока работает одно приложение (или несколько приложений), но работают они по одним правилам, то есть везде используется одна и та же функция формирования Description, то это всё работает. Но как только "ручками", кто-то править в БД будет, то триггер отработает, а без него Description будет "сломан" Поэтому с базой должно работать одно приложение, а другие работать с данными через него. Это называется трёх-звенка . Другими словами, это BLL должен быть реализован отдельно от БД через какой-то уровень абстракции, например через паттерн Repository. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 05:28 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabongaпаттерн Repositoryдался вам этот паттерн. Люди не любящие бд давно придумали слово интерцептор вмест слова триггер. Ну, еще иногда эвент, сбытие, листенер. Так что DbInterception должно тебя устроить. По хорошему надо уметь писать и так и так. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 07:31 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabongaэто BLL должен быть реализованв сервисном слое ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 07:33 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Petro123, Странный комментарий, а особенно про "писать и так и так". К чему это? Писать с использованием древнего подхода (двух-звенка) и более продвинутого (трех-звенка)... А зачем писать по-старому? Какой от этого профит? А про людей, которые не любят БД, вообще не понял. Таких "выдумывающих" дохреналионы, а паттерн один, и какая разниница как они его называют? Главное, на мой взгляд, чтобы люди понимали что говорят их аппоненты. А как ты паттерн Repository назовёшь - уже рояля не играет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 07:39 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, Ты собрался сайты клепать или кровавый энтерпрайз? Вот, в кровавом, надо знать триггеры, хп, нормализацию, маппинг... Хотя конечно мы в ветке трех звенки. Так что про старье ты зря. Стареют инструменты, а архитектура почти нет. Про паттерн не понял. Назвать их по другому нельзя. Их имена это словарь и константы. Это зубрить. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 07:59 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongahVosttпропущено... Поэтому с базой должно работать одно приложение, а другие работать с данными через него. Это называется трёх-звенка . Другими словами, это BLL должен быть реализован отдельно от БД через какой-то уровень абстракции, например через паттерн Repository. Так? Ага, это типовой подход. А ещё есть CQRS с одной БД и без Event Sourcing ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:03 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, Или коротко по сабжу - триггеры это не старьё! Даже если появились интерцепторы.) Ферштеен? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:04 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaСтранный комментарий, а особенно про "писать и так и так". К чему это? Мой Вам совет: просто не обращайте внимание на его флуд ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:11 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANACalabongaСтранный комментарий, а особенно про "писать и так и так". К чему это? Мой Вам совет: просто не обращайте внимание на его флуд ревнует)))))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:15 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANACalabongaСтранный комментарий, а особенно про "писать и так и так". К чему это? Мой Вам совет: просто не обращайте внимание на его флуд Очень дельное замечание, спасибо. А то я уже думал, что всё пропало и мы все умрем. Наверное, уважаемый разработчик не обратил внимание на тему "Code Fisrt + Triggers", потому что с технологиями всё понятно, вопрос об их смешивании. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:17 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, А зачем вам смешивать? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:20 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Кстати, уважаемые коллеги, раз уж подобрался высокообразованный контингент, то очень бы хотелось услышать ваше мнение относительно одной статьи "Архитектура приложений: концептуальные слои и договоренности по их использованию" . Принимаются комментрии, замечания, дополнения и конструктивная критика. Особенно интересует мнение относитель но "Абстрактные уровни Data Access Layer". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:22 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Petro123Calabonga, А зачем вам смешивать? Да не я смешиваю, я как раз пытаюсь доказать, что смешивать - ЗЛО! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:22 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabongaвопрос об их смешивании. :)если вы прогер, то первый вариант ответа - не смешивать. Это по логике. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:23 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaКстати, уважаемые коллеги, раз уж подобрался высокообразованный контингент, то очень бы хотелось услышать ваше мнение относительно одной статьи "Архитектура приложений: концептуальные слои и договоренности по их использованию" . Принимаются комментрии, замечания, дополнения и конструктивная критика. Особенно интересует мнение относитель но "Абстрактные уровни Data Access Layer".зачем прыгать по темам? С триггером что? Интерцептор подходит? Или флудим? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:25 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Petro123, Ну, конечно же, ведь, мы ради этого тут и собрались!!! А с другой стороны, только вам можно флудить? :) У нас свободная страна, не нравится - не читай. А понимающие люди оценят. Вы себя к каким людям отнесёте? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:30 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, Ну, я ждал ответа с логикой. Логики нет. Пока умолкаю. Купил попкорн) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:31 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaКстати, уважаемые коллеги, раз уж подобрался высокообразованный контингент, то очень бы хотелось услышать ваше мнение относительно одной статьи "Архитектура приложений: концептуальные слои и договоренности по их использованию" . Принимаются комментрии, замечания, дополнения и конструктивная критика. Особенно интересует мнение относитель но "Абстрактные уровни Data Access Layer". Первая фраза "Построение сложных и не очень сложных систем задача не тривиальная". Не помню, кто сказал: "просто не значит тривиально", - но там где сложно, там уж ясно, что не тривиально ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:32 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, пролистал до "Абстрактные уровни Data Access Layer", посмотрел на картинку. Возник вопрос. А Вы с DDD знакомы? Читали Эванса? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:36 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
И ещё CLSA напомнило: http://cslanet.com ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:39 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANA, Кончено, а что смутило? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:41 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANA, Напомнило... Хм... Рано или поздно, каждый программист начинает писать свой "велосипед". Тут вопрос не в "велосипеде", а в том, по какие канонам его изготавливать, какие правила применять и какие инструменты использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:45 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaskyANA, Кончено, а что смутило?Мысль введения в чём? В том, что если разбивать на слои и придерживаться договоренностей по их использованию, то станет проще? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:47 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaskyANA, Напомнило... Хм... Рано или поздно, каждый программист начинает писать свой "велосипед". Тут вопрос не в "велосипеде", а в том, по какие канонам его изготавливать, какие правила применять и какие инструменты использовать. Это была не критика, я Вам не оппонирую, не начинайте защищаться ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:48 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANACalabongaskyANA, Кончено, а что смутило?Мысль введения в чём? В том, что если разбивать на слои и придерживаться договоренностей по их использованию, то станет проще? Именно! Потому что по такому же принципу работает, например MVC Framework. Ты точно значешь, где контролер, а где представление (view). Нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:50 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaskyANAпропущено... Мысль введения в чём? В том, что если разбивать на слои и придерживаться договоренностей по их использованию, то станет проще? Именно!Тогда бы я поигрался с введением, чтобы просто и чётко эту мысль выразить, чтобы читающий сразу понял о чём речь пойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 08:52 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANACalabongaпропущено... Именно!Тогда бы я поигрался с введением, чтобы просто и чётко эту мысль выразить, чтобы читающий сразу понял о чём речь пойдёт. Хорошо. Принято, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 09:00 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, Круто у тебя там по ссылке: авторТак повелось, что с некоторого времени я перестал разделять проекты на сложные и простые, Нашел золотую пулю. Зы В заголовок внеси слова ASP.NET 5. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 09:13 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Petro123Calabonga, Круто у тебя там по ссылке: авторТак повелось, что с некоторого времени я перестал разделять проекты на сложные и простые, Нашел золотую пулю. Зы В заголовок внеси слова ASP.NET 5. На самом деле, это работает и на WPF и на Core и на Silverlight работало. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 09:44 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaНа самом деле, это работает и на WPF и на Core и на Silverlight работало. :)в смысле? Wpf десктоп Core сомнения Сильвер лучше не упоминать ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 09:47 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, Даже с точки зрения выдачи в гугле по ключевым надо вставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 09:49 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, прочитал. Репозиторий у Вас не совсем репозиторий. TagRepository на мой взгляд не имеет смысла. Также как и Provider. Пример: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
Усё, о "каким-то образом обрабатывать метки (tags)" позаботится EF. Я бы Вам посоветовал почитать про Domain Driven Design. Думаю, что Вам будет интересно. https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 09:59 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Ну и конечно всё должно быть Async ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 10:01 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaДругими словами, это BLL должен быть реализован отдельно от БД через какой-то уровень абстракции, например через паттерн Repository. Так? Да, всё верно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 10:45 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANAНу и конечно всё должно быть Async ja, ja, das ist fantastisch! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 10:47 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANA, Склонен несогласиться с вами, потому что с такой реализацией успешно справляется сам DbContext, он это реализуте "из коробки". При таком раскладе Ваш Repository лишнее промежуточное звено. Поэтому, я предпочитаю кое-что добавлять в реализацию репозитория, чтобы было более полезно. Например, Mapping или Pagination. Даже сделал пару пакетов Calabonga.EntityFramework и Calabonga.EntityFrameworkCore более того, описал это в другой статье . С другой стороны, сколько людей, столько и мнений. Весьма признателен вам, что уделили своё драгоценное внимание. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 11:22 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANA, авторЯ бы Вам посоветовал почитать про Domain Driven Design. Думаю, что Вам будет интересно. https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577 Спасибо, я обязательно почитаю. Может чего нового найду. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 11:23 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANAПример: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
Это нормальный репозиторий. Суть в том что можно переписать для другого ApplicationDbContext. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 11:35 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaskyANA, Склонен несогласиться с вами, потому что с такой реализацией успешно справляется сам DbContext, он это реализуте "из коробки". При таком раскладе Ваш Repository лишнее промежуточное звено. Поэтому, я предпочитаю кое-что добавлять в реализацию репозитория, чтобы было более полезно. Например, Mapping или Pagination. Даже сделал пару пакетов Calabonga.EntityFramework и Calabonga.EntityFrameworkCore более того, описал это в другой статье . С другой стороны, сколько людей, столько и мнений. Весьма признателен вам, что уделили своё драгоценное внимание. Спасибо. Суть репозитория в том, что он скрывает за собой хранилище. То есть это может быть и SQL Server, и MongoDB, и Couchbase, и сторонний сервис, и вообще несколько хранилишь последовательно, или параллельно. У Вас же это выходит не репозиторий, а обёртка над EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 11:50 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabongaон это реализуте "из коробки".+1 CalabongaПоэтому, я предпочитаю кое-что добавлять в реализацию репозитория, чтобы было более полезно. Например, Mapping или Paginationну дак и это есть в NuGet маленькой добавочкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 11:52 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
ViPRosЭто нормальный репозиторий. Суть в том что можно переписать для другого ApplicationDbContext.ты с EF не работал, поэтому все переписываешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 11:53 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANACalabongaskyANA, Склонен несогласиться с вами, потому что с такой реализацией успешно справляется сам DbContext, он это реализуте "из коробки". При таком раскладе Ваш Repository лишнее промежуточное звено. Поэтому, я предпочитаю кое-что добавлять в реализацию репозитория, чтобы было более полезно. Например, Mapping или Pagination. Даже сделал пару пакетов Calabonga.EntityFramework и Calabonga.EntityFrameworkCore более того, описал это в другой статье . С другой стороны, сколько людей, столько и мнений. Весьма признателен вам, что уделили своё драгоценное внимание. Спасибо. Суть репозитория в том, что он скрывает за собой хранилище. То есть это может быть и SQL Server, и MongoDB, и Couchbase, и сторонний сервис, и вообще несколько хранилишь последовательно, или параллельно. У Вас же это выходит не репозиторий, а обёртка над EF. ну и что? как только надо будет обернуть что то другое он напишет другую реализацию ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 11:54 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Petro123ViPRosЭто нормальный репозиторий. Суть в том что можно переписать для другого ApplicationDbContext.ты с EF не работал, поэтому все переписываешь. когда ж ты научишься? такое впечатление, что какой-то небольшой барьер не можешь преодолеть как только перескочишь сразу левел будет другой ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 11:58 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
Calabonga, и мой пример был про то, что TagRepository и Provider не имеют смысла. Вполне можно ограничиться PostRepository : Repository<Post> , либо вообще DbContext, но тогда возникает жёсткая зависимость от EF. Post - это корень агрегации, сущность (Entity). И при её сохранении EF отобразит её на все нужные таблицы, на то EF и ORM ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 11:59 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
ViPRos, Ты helloWorld сайт написал? А че за советы? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:00 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
ViPRosskyANAпропущено... Суть репозитория в том, что он скрывает за собой хранилище. То есть это может быть и SQL Server, и MongoDB, и Couchbase, и сторонний сервис, и вообще несколько хранилишь последовательно, или параллельно. У Вас же это выходит не репозиторий, а обёртка над EF. ну и что? как только надо будет обернуть что то другое он напишет другую реализацию Он написал: "При таком раскладе Ваш Repository лишнее промежуточное звено". Позволь спросить, если он выкинет это звено, то другую реализацию чего он напишет, DbContext что-ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:01 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANA, Мне показалось, что ты сказал что это пример "неправильного" репозитория. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:03 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
skyANAСуть репозитория в том, что он скрывает за собой хранилище. Я бы сказал больше, он скрывает за собой хранилище, и особенности хранения данных в данном хранилище, которые скрываются слоем доступа к данным. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:29 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
[quot skyANA]CalabongaskyANA, Суть репозитория в том, что он скрывает за собой хранилище. То есть это может быть и SQL Server, и MongoDB, и Couchbase, и сторонний сервис, и вообще несколько хранилишь последовательно, или параллельно. У Вас же это выходит не репозиторий, а обёртка над EF. Репозиторий - как абстракция на доступ к БД (DAL). Его задача отвязаться от конкретной БД. То есть вашему репозиторию должно быть абсолютно фиалетово, к какой базе данных цепляться (MS SQL, PostgreSQL, SqlLite, Oracle, InMemory, etc). Таким образом, EntityFramework делает тоже самое только на основании набора Provider'ов. Именно поэтому я и говорю, что ваша реализация просто дублирует функционал, который уже делает EntityFramework. И я считаю, что в этом очень мало смысла. Поэтому я в свой репозиторий привнес немного больше обязанностей, как то: Mapping, Pagination and Secutiry (в частности, Row Level Security). И, собственно говоря, можно сказать, что моя реализация - это "Надстройка на EntityFramework" ибо просто Repository уже в EntityFramework реализован. P.S.: Кстати сказать, при использовании DI-контейнера паттерн Unit Of Work тоже не имеет смысла в силу того, что контейнер реализует его функционал на 100%. Но вы можете привнести своё видение в этот паттерн, и у вас будет своя обёртка. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:33 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
hVosttskyANAСуть репозитория в том, что он скрывает за собой хранилище. Я бы сказал больше, он скрывает за собой хранилище, и особенности хранения данных в данном хранилище, которые скрываются слоем доступа к данным. Скорее такого шаблона просто нет, это частный случай враппера. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:35 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
А общее правило вырисовывается в виде "оборачивай все то, что не твое или твое, но может измениться". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:37 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
ViPRosСкорее такого шаблона просто нет, это частный случай враппера. Вовсе нет. Просто когда от репозитория хотят: фильтрацию, пейджинг, поиск, ковыряние в данных... тогда абстракция начинает плыть и рождаются уродливые год обжекст. Нужны либо спецификации, либо квери обжект, тогда всё будет путём. Не нужно из репозитория возвращать IQueryable. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:37 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
ViPRosА общее правило вырисовывается в виде "оборачивай все то, что не твое или твое, но может измениться". Нет, это как сказать, глядя на работу хирурка, режь, режь всё что попадётся под руку ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:38 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
hVostt, возвращать в общем случае надо либо явно свое, либо системное ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:39 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
hVostt, зато ни один гад не сможет сказать что писал не по паттернам :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:42 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
IQuerable можно возвращать - это часть NET ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 12:43 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
CalabongaПоэтому я в свой репозиторий привнес немного больше обязанностей, как то: Mapping, Pagination and Secutiry (в частности, Row Level Security). А где он? Твой? Документация? Примеры? Мы то про триггер, то про ОРМ то про паттерн. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 13:02 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
ViPRosIQuerable можно возвращать - это часть NET Зачем, если можно на IQueryable делать классные типизированные спецификации? Куски LINQ запросов к данным, разбросанные по классам выглядят не намного лучше размазанных SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 13:07 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
hVostt, Я имею ввиду что по науке паттерностроения возврат IQuerable не может быть квалифицирована как ошибка и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 13:10 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
[quote Calabonga]skyANACalabongaskyANA, Суть репозитория в том, что он скрывает за собой хранилище. То есть это может быть и SQL Server, и MongoDB, и Couchbase, и сторонний сервис, и вообще несколько хранилишь последовательно, или параллельно. У Вас же это выходит не репозиторий, а обёртка над EF. Репозиторий - как абстракция на доступ к БД (DAL). Его задача отвязаться от конкретной БД. То есть вашему репозиторию должно быть абсолютно фиалетово, к какой базе данных цепляться (MS SQL, PostgreSQL, SqlLite, Oracle, InMemory, etc). Таким образом, EntityFramework делает тоже самое только на основании набора Provider'ов. Именно поэтому я и говорю, что ваша реализация просто дублирует функционал, который уже делает EntityFramework. И я считаю, что в этом очень мало смысла. Поэтому я в свой репозиторий привнес немного больше обязанностей, как то: Mapping, Pagination and Secutiry (в частности, Row Level Security). Вы не улавливаете сути. Не только БД. Конкретная реализация репозитория вполне может работать со сторонним сервисом. Или не только с SQL БД, но и с MongoDB. Или с Key/Value storage: Couchbase, Redis. Можно заинжектить такую реализацию IRepository, что данные сначала будут искаться в локальной памяти, потом в распределённом кэше, в БД и если нигде нет, то запрашивать сторонний сервис, класть в БД, распределённый кэш и память ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 13:23 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
И при этом принцип единственности ответственности не будет нарушаться ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 13:25 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
ViPRoshVostt, Я имею ввиду что по науке паттерностроения возврат IQuerable не может быть квалифицирована как ошибка и все. Превалирует мнение, что возвращаться должен IEnumerable, а не IQueryable. А для меня всё одно. И так и так -- не верно. Запросы должны быть отдельно, чтобы их можно было тестировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 13:29 |
|
Code First + SQL Triggers
|
|||
---|---|---|---|
#18+
hVostt, Подспудно понятно что, IEnumerable менее опасная штука, чем IQueryable. Но формально катит по всем канонам паттерноведния. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 13:49 |
|
|
start [/forum/topic.php?all=1&fid=18&tid=1355206]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
98ms |
get tp. blocked users: |
1ms |
others: | 272ms |
total: | 448ms |
0 / 0 |