|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
Алексей КskyANAИ если поступать так, как Вы с отчётами: фигачить 100500 методов в репозиторий с сущностями, что нужны только в одном из модулей, - то нарушение SRP становится ни фига не мифическим :)Нет никаких 100500 методов в классе, если нормально следовать правилам рефакторинга, например по тому же Фаулеру. А вот если фанатично каждый метод выносить в отдельный класс, то можно напороться на слишком маленькую ответственность класса, что тоже плохо - чем больше классов, тем выше затраты на их интеграцию. Нужно искать компромисс количества методов в классе. skyANAИ автор рассказывает как эволюционировал их код, после того, как они столкнулись с данной проблемой на практике. Когда и вы на это напоретесь, если напоретесь, то можешь изобрести что-то своё.Мы тоже сталкивались с такими проблемами на практике. Все проблемы были успешно преодолены применением банального рефакторинга и разработкой принципов группирования методов в классы.Пример привести можешь? Я например в своей практике столкнулся с тем, что планировщику по крону нужно было выбирать данные биллинга и рассыылать всякие инвойсы клиентам на оплату, ремайндеры об оплате, о задолженности и т.п. Ну и весь скоп методов, что нужны были планировщику, был вынесен в ScheduleRepository, а не в BillingRepository. Ты о таком решении? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 11:50 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
МСУАлексей КНормально, ага. Тынц Мир паттернами не измеряется, он гораздо шире. Ты хочешь инструкцию на все случаи жизни? Готов разочаровать, такой не существует.Ну и накой тогда все эти паттерны? МСУДа и где ты увидел нарушения при использовании обычного наследования?Да нет нарушений. Просто если базовый класс является репозитарием, то все его потомки, наверное, тоже репозитарии. МСУАлексей КВсе эти классы можно считать репозитариями, или только какой-то один? Какая-то бессвязная каша. На помойку.Неожиданно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 11:55 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
skyANAНу и весь скоп методов, что нужны были планировщику, был вынесен в ScheduleRepository, а не в BillingRepository. Ты о таком решении?Ну такое решение тоже имеет право на жизнь. У всех свои предметные области со своими особенностями. Я не смогу привести пример. Я согласен, в каких-то случаях наверняка есть смысл вынести запрос для отчёта в отдельный репозитарий, но не во всех. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:02 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
skyANAАлексей КАвтор не смог нормально организовать код в репозитариях. Автор решил выделить каждый метод в отдельный класс, мотивируя это каким-то мифическим нарушением SRP. Бог ему судья.Понимаешь. Когда у тебя модульная архитектура, о переходе к которой пишет автор. То одному модулю нужны одни данные, второму другие, третьему... и т.д.И это... Автор пишет о том, что одна БД стала в их системе тонким местом, поэтому они решили сделать распределённую систему. По сути, речь идёт о банальной оптимизации по скорости выполнения запросов к БД. Странно, что автор не упоминает возможность применения пэйджинга, как очень эффективного способа повысить производительность системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:08 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
МСУskyANAПонятно что работает. Но это не лучшее решение. Ну знаешь ли. Лучшее или не лучшее, это не тебе судить. Оно решает озвученную тобой задачу и легко ложится в концепцию репо.Не решает. Я хочу не только в HttpRuntime.Cache кэшировать, но и в распределённый кэш Redis-а. Причём хочу комбинировать, то есть какие-то сущности складывать и туда, и туда. Какие-то только в HttpRuntime.Cache, какие-то только в Redis. Пишу два декоратора: Код: c# 1.
и Код: c# 1.
И комбинирую их через инверсию. А используя твой велосипед этого не сделать. Также мне для тех сущностей, что хранятся в MongoDB нужен Код: c# 1.
т.к. в монге нет транзакций и необходимых мне уровней блокировок. И этот декоратор я успешно комбинирую с другими. Тут ещё стоит отметить то, что в твоём примере CachedAlbumRepository наследуется от EfAlbumRepository. Это получается мне для MongoAlbumRepository надо лепить своего наследника с абсолютно таким же функционалом. Как-то не хочется мне этого совсем :) МСУskyANAВ реальной системе не одну сущность надо кэшировать, не только Album-ы как в твоём примере, а несколько. И что ты будешь делать? Реализовывать N наследников от N репозиториев? Да. Точно так же, как в случае с декоратором . И это правильно.Хоть один-то в реальном проекте уже реализовал? Нет ведь. :) МСУskyANAА декоратор для кэширования реализуется один и применяется к N репозиториям через инверсию. Смотря как писать. Можно иметь один толстый кеширующий декоратор, можно его разносить по логической связи, как у меня в рецепте. Я бы лучше разносил, а не гадил в одну навозную кучу. Но в любом случае это не проблема.Ты так ничего и не понял. Ну будет толстого кэшируещего декоратора. Будет комбинация лёгких декораторов. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:09 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
МСУskyANAДурак ты, чё. Параноики начали ругаться от бессилия? Забавно.Да нет, просто надо было что-то ответить на "Молодец, чё". Видишь, забавно получилось :) МСУskyANAЯ не строю архитектру по хабрам, я использую его как источник информации о том, чтобы понять что "У NoSQL есть свои плюсы, есть и свои минусы" и какие. Про архитектуру "на ораклах в билайнах, мтсах и мегафонах" мне ничего не известно, они не выступают на конференциях. Зато IBM регулярно устраивает митапы. И всякие Evernote выступают на конференциях. Я тебе говорю о том, что любые задачи решаются (и хорошо решаются!) на обычных реляционных БД с внятными констреинтами и прочими фичами. Большинство неофитов вроде тебя за уши притягивают NoSQL, которая нафик не уперлась.Давай не будем скатываться в пустую болтовню о неофитах и NoSQL. Почитай статью, потом расскажешь, что там Фаулер притянул за уши. МСУskyANAИ я не исключаю того, что "в билайнах, мтсах и мегафонах" на ораклах крутится только основное хранилище, а биллинги уже давно построены на каких-нибудь очередях и NoSQL :) Там дураков нет :)Вот и я о том же :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:12 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
faustmangos, авторТакой вопрос - для чего нужна автономная работа с бд? Какой от этого прок на практике? по большому счету для самого приложения ( визуализация данных, б.л.) это вообще прозрачно откуда берутся данные оно пишется в классическом стиле техзвенки, его совершенно не должно это заботить, а вот промежуточный слой и определяет откуда брать данные, доступность связи,авто - синхронизация локала и сервиса и т.д.), датасет прерогатива промежуточного слоя, скажем так одна из возможности его построения ( хороша она или нет, все зависит от танцора) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:13 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
Алексей КskyANAНу и весь скоп методов, что нужны были планировщику, был вынесен в ScheduleRepository, а не в BillingRepository. Ты о таком решении?Ну такое решение тоже имеет право на жизнь. У всех свои предметные области со своими особенностями. Я не смогу привести пример. Я согласен, в каких-то случаях наверняка есть смысл вынести запрос для отчёта в отдельный репозитарий, но не во всех.Погоди, ты же сам написал: "Мы тоже сталкивались с такими проблемами на практике. Все проблемы были успешно преодолены применением банального рефакторинга и разработкой принципов группирования методов в классы". В какие это классы, если не в другие репозитории? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:14 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Понимаешь. Когда у тебя модульная архитектура, о переходе к которой пишет автор. То одному модулю нужны одни данные, второму другие, третьему... и т.д.И это... Автор пишет о том, что одна БД стала в их системе тонким местом, поэтому они решили сделать распределённую систему. По сути, речь идёт о банальной оптимизации по скорости выполнения запросов к БД. Странно, что автор не упоминает возможность применения пэйджинга, как очень эффективного способа повысить производительность системы.Он же не пишет о том, в чём конкретно был затык. Ты к примеру оптимизировал когда-нибудь EAV? Когда пользователи насоздают 100500 своих атрибутов для сущностей, а потом хотят по ним искать? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:18 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Ну такое решение тоже имеет право на жизнь. У всех свои предметные области со своими особенностями. Я не смогу привести пример. Я согласен, в каких-то случаях наверняка есть смысл вынести запрос для отчёта в отдельный репозитарий, но не во всех.Погоди, ты же сам написал: "Мы тоже сталкивались с такими проблемами на практике. Все проблемы были успешно преодолены применением банального рефакторинга и разработкой принципов группирования методов в классы". В какие это классы, если не в другие репозитории?Ну да, в другие репозитарии. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:19 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Погоди, ты же сам написал: "Мы тоже сталкивались с такими проблемами на практике. Все проблемы были успешно преодолены применением банального рефакторинга и разработкой принципов группирования методов в классы". В какие это классы, если не в другие репозитории?Ну да, в другие репозитарии.Ты уж тогда определись Алексей КНу такое решение тоже имеет право на жизнь. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:21 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... И это... Автор пишет о том, что одна БД стала в их системе тонким местом, поэтому они решили сделать распределённую систему. По сути, речь идёт о банальной оптимизации по скорости выполнения запросов к БД. Странно, что автор не упоминает возможность применения пэйджинга, как очень эффективного способа повысить производительность системы.Он же не пишет о том, в чём конкретно был затык.Таки пишет, в самом начале. И приводит это в качестве причины для изменения архитектуры. :-) авторПроблемы с масштабированием Подход описанный выше работает при решении типовых задач. Проблемы начинаются со временем, когда БД вырастает до сотен гигабайт, когда появляется много желающих считать и записать данные в БД. БД перестает справляться с потоком транзакций от всех подсистем, начинаются блокировки и задержки с откликом. Какое самое простое решение проблемы? Вертикальное масштабирование, т.е. докупание железа. Давайте купим сервер помощнее! У вертикального масштабирования, к сожалению, есть потолок роста. После покупки очередного сервера с 2 ТБ SSD-дисков вы начитаете задумываться, может что-то надо менять в архитектуре?Архитектурное желание разделить чтения и записи по разным БД имеет право на жизнь, но реализация мне не понравилась. skyANAТы к примеру оптимизировал когда-нибудь EAV? Когда пользователи насоздают 100500 своих атрибутов для сущностей, а потом хотят по ним искать?Нет, Бог миловал. Пару лет назад мне хватило терпения убедить своих коллег не городить EAV в одном из наших проектов. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:27 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Ну да, в другие репозитарии.Ты уж тогда определись Алексей КНу такое решение тоже имеет право на жизнь.Мне кажется, что ты меня неправильно понял. Повторюсь, в каких-то случаях можно делать отдельный репозитарий под один, грубо говоря, отчёт, но не всегда. Фанатизм - это плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:29 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
вдогонку: банальное выделение класса по Фаулеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:30 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
Где-то в степиfaustmangos, авторТакой вопрос - для чего нужна автономная работа с бд? Какой от этого прок на практике? по большому счету для самого приложения ( визуализация данных, б.л.) это вообще прозрачно откуда берутся данные оно пишется в классическом стиле техзвенки, его совершенно не должно это заботить, а вот промежуточный слой и определяет откуда брать данные, доступность связи,авто - синхронизация локала и сервиса и т.д.), датасет прерогатива промежуточного слоя , скажем так одна из возможности его построения ( хороша она или нет, все зависит от танцора)DataSet - это структура данных, используемая в качестве модели. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:33 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
Алексей КГде-то в степиfaustmangos, пропущено... по большому счету для самого приложения ( визуализация данных, б.л.) это вообще прозрачно откуда берутся данные оно пишется в классическом стиле техзвенки, его совершенно не должно это заботить, а вот промежуточный слой и определяет откуда брать данные, доступность связи,авто - синхронизация локала и сервиса и т.д.), датасет прерогатива промежуточного слоя , скажем так одна из возможности его построения ( хороша она или нет, все зависит от танцора)DataSet - это структура данных, используемая в качестве модели. ну и что? от этого ее место использования не меняется, или Вы ее хотите с маслом на грид намазывать? пожалуйста - в net все возможно.. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:39 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
Алексей КНу и накой тогда все эти паттерны? Так отделяй зерна от плевел. Алексей КДа нет нарушений. Просто если базовый класс является репозитарием, то все его потомки, наверное, тоже репозитарии. Ну я ж поправился во втором посте :) Речь о том, чтобы был независимый репо. А все остальные обёртки - по требованию. Алексей КНеожиданно. ? :) skyANAНе решает. Я хочу не только в HttpRuntime.Cache кэшировать, но и в распределённый кэш Redis-а. Причём хочу комбинировать, то есть какие-то сущности складывать и туда, и туда. Какие-то только в HttpRuntime.Cache, какие-то только в Redis. Ну пиши свои реализации кеш-репо, не вижу проблем. Сколько надо вариаций кешей, пиши столько оберток. И всё будет работать с базовым репо, а дальше уже по внутренней логике. skyANAЭто получается мне для MongoAlbumRepository надо лепить своего наследника с абсолютно таким же функционалом. Как-то не хочется мне этого совсем :) Ну и пусть будет с таким же функционалом, ты же его не реализуешь. Он сам приходит тебе бесплатно. Какие проблемы? Страхи? :) skyANAХоть один-то в реальном проекте уже реализовал? Нет ведь. :) Давно было, сейчас в кешировании нет надобности. Кеширование - это зло. Редко помогает избежать проблемы с производительностью, сейчас таких проблем нет. skyANAТы так ничего и не понял. Ну будет толстого кэшируещего декоратора. Будет комбинация лёгких декораторов. :) Ты так ничего и не понял. Не будет никаких декораторов, будет кеширующий репо :) skyANAДа нет, просто надо было что-то ответить на "Молодец, чё". Видишь, забавно получилось :) Ты бредишь? :) skyANAДавай не будем скатываться в пустую болтовню о неофитах и NoSQL. Почитай статью, потом расскажешь, что там Фаулер притянул за уши. Мне фиолетовы уши, меня 100% устраивают возможности нормальных СУБД, а не этого отмороженного распиаренного говна. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:39 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
Где-то в степиАлексей Кпропущено... DataSet - это структура данных, используемая в качестве модели. ну и что? от этого ее место использования не меняется, или Вы ее хотите с маслом на грид намазывать? пожалуйста - в net все возможно..Ну просто дал более точную оценку происходящему. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:43 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
МСУАлексей КНу и накой тогда все эти паттерны? Так отделяй зерна от плевел.Это работа паттерностроителей. Я за разделение труда. :-) МСУАлексей КДа нет нарушений. Просто если базовый класс является репозитарием, то все его потомки, наверное, тоже репозитарии. Ну я ж поправился во втором посте :) Речь о том, чтобы был независимый репо. А все остальные обёртки - по требованию.Да я понял, я просто пользуясь случаем к словам придираюсь. МСУАлексей КНеожиданно. ? :)Ну я привёл типовой пример. Хочу знать, какой из классов можно считать репозитарием, согласно современной теории репозитариев. Замени кэширование чем-то ещё, если не нравится, суть от этого не изменится. Есть классы: 1. EF DbContext. 2. Слой классов с логикой на базе IQueryable. 3. Слой классов с логикой на базе IEnumerable. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:48 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
МСУskyANAДавай не будем скатываться в пустую болтовню о неофитах и NoSQL. Почитай статью, потом расскажешь, что там Фаулер притянул за уши. Мне фиолетовы уши, меня 100% устраивают возможности нормальных СУБД, а не этого отмороженного распиаренного говна.А ведь можно сериализовать объект в XML/JSON и запихать полученное в BLOB. Или это медленно? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:49 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Ты уж тогда определись пропущено... Мне кажется, что ты меня неправильно понял. Повторюсь, в каких-то случаях можно делать отдельный репозитарий под один, грубо говоря, отчёт, но не всегда. Фанатизм - это плохо.То есть можно применять CQRS, но без фанатизма :) Кто бы спорил. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:53 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
Алексей К, тут ведь должно быть все просто и цинично, вся программа должна быть расписана на независимые модули ( если что то уеббало, то у-о в одном месте), размазывать портфельный тип данных на основное приложение чистое безумие. Ну заехал в команду Тепляков, переписал одно место, и программа прозрачно обновилась, или парень например вырос из датасетов переписал кусок - все работает бывает хуже - отменили портфельные данные все офф, и кинулась команда переписывать все приложение ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:55 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
Алексей КМСУпропущено... Мне фиолетовы уши, меня 100% устраивают возможности нормальных СУБД, а не этого отмороженного распиаренного говна.А ведь можно сериализовать объект в XML/JSON и запихать полученное в BLOB. Или это медленно?Медленно. Вангую, что как только МСУ попробует EF7 с Redis-ом, так сразу распиаренное говно станет православной конфеткой ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:59 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Мне кажется, что ты меня неправильно понял. Повторюсь, в каких-то случаях можно делать отдельный репозитарий под один, грубо говоря, отчёт, но не всегда. Фанатизм - это плохо.То есть можно применять CQRS, но без фанатизма :) Кто бы спорил.Да. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:59 |
|
Применение автономной работы с бд на практике
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... А ведь можно сериализовать объект в XML/JSON и запихать полученное в BLOB. Или это медленно?Медленно. Вангую, что как только МСУ попробует EF7 с Redis-ом, так сразу распиаренное говно станет православной конфеткой Не исключено. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2015, 12:59 |
|
|
start [/forum/topic.php?fid=17&msg=38849020&tid=1349647]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
162ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 269ms |
0 / 0 |