Создание повторно используемых бизнес моделей с помощью технологии Domain Com...GetDev.NET
Материалы со встречи: http://getdev.net/Event/xaf-reuse
Задумывались ли вы когда-нибудь, что с переходом от SQL к DataSet, а затем и к ORM типа Entity Framework развитие технологий для доступа и управления данными приостановилось? Что еще нового можно придумать к уже привычному оперированию записями таблиц БД как объектами CRL и при этом поднять удобство разработчика на следующий уровень? На этот и другие вопросы попробует дать ответ доклад о технологии Domain Components (часть DevExpress eXpressApp Framework), которая облегчает создание повторно используемых бизнес моделей за счет легкого комбинирования путем использования интерфейсов вместо классов (это позволяет вам эмулировать "множественное наследование" в C# и VB.NET), а также свободы от особенностей конкретной ORM.
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
РИТ++ 2017, Backend Conf
Зал Кейптаун, 5 июня, 10:00
Тезисы:
http://backendconf.ru/2017/abstracts/2773.html
В этом докладе я рассмотрю несколько перспективных, на мой взгляд, баз данных, которые пока еще не очень популярны, но которые определенно ждет успех в будущем, особенно для highload-проектов. Я расскажу о Tarantool, ClickHouse и CockroachDB, о том, как они устроены, и почему я считаю, что они в будущем станут стандартом де-факто, как раньше был MySQL, а сейчас — MongoDB.
...
Рост популярности NoSQL - одно из важнейших изменений технологий управления данными. За счет "не реляционности" достигается высочайшая гибкость, скорость работы и масштабируемость БД. NoSQL не исключает использование реляционных БД, обе технологии с пользой дополняют друг друга. Как можно моделировать NoSQL данные, не имеющие жестких схем, и какую пользу можно получить в результате. Слайды с вебинара Embarcadero. На русском языке
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
Рассказ об основных принципах, которых придерживается Viber в длительной разработке приложения с большой кодовой базой — если разработкой занимается распределённая команда. Мы обсудим используемые технологии, библиотеки, работу с кодом и многое другое.
Общие сведения о clickhouse и возможностях его применения для аналитики на примере нашего опыта.
More useful info on our:
- website: https://clickky.biz
- blog: https://clickky.biz/blog
Sign up!
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
Презентация к докладу «Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection» с конференции .NEXT SPb 2015 (Санкт-Петербург, 5 июня 2015)
http://spb2015.dotnext.ru/#cvetkih_talk
More Related Content
Similar to Есть ли жизнь с ORM или типовая архитектура CRUD приложения
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...GetDev.NET
Материалы со встречи: http://getdev.net/Event/xaf-reuse
Задумывались ли вы когда-нибудь, что с переходом от SQL к DataSet, а затем и к ORM типа Entity Framework развитие технологий для доступа и управления данными приостановилось? Что еще нового можно придумать к уже привычному оперированию записями таблиц БД как объектами CRL и при этом поднять удобство разработчика на следующий уровень? На этот и другие вопросы попробует дать ответ доклад о технологии Domain Components (часть DevExpress eXpressApp Framework), которая облегчает создание повторно используемых бизнес моделей за счет легкого комбинирования путем использования интерфейсов вместо классов (это позволяет вам эмулировать "множественное наследование" в C# и VB.NET), а также свободы от особенностей конкретной ORM.
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
РИТ++ 2017, Backend Conf
Зал Кейптаун, 5 июня, 10:00
Тезисы:
http://backendconf.ru/2017/abstracts/2773.html
В этом докладе я рассмотрю несколько перспективных, на мой взгляд, баз данных, которые пока еще не очень популярны, но которые определенно ждет успех в будущем, особенно для highload-проектов. Я расскажу о Tarantool, ClickHouse и CockroachDB, о том, как они устроены, и почему я считаю, что они в будущем станут стандартом де-факто, как раньше был MySQL, а сейчас — MongoDB.
...
Рост популярности NoSQL - одно из важнейших изменений технологий управления данными. За счет "не реляционности" достигается высочайшая гибкость, скорость работы и масштабируемость БД. NoSQL не исключает использование реляционных БД, обе технологии с пользой дополняют друг друга. Как можно моделировать NoSQL данные, не имеющие жестких схем, и какую пользу можно получить в результате. Слайды с вебинара Embarcadero. На русском языке
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
Рассказ об основных принципах, которых придерживается Viber в длительной разработке приложения с большой кодовой базой — если разработкой занимается распределённая команда. Мы обсудим используемые технологии, библиотеки, работу с кодом и многое другое.
Общие сведения о clickhouse и возможностях его применения для аналитики на примере нашего опыта.
More useful info on our:
- website: https://clickky.biz
- blog: https://clickky.biz/blog
Sign up!
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
Презентация к докладу «Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection» с конференции .NEXT SPb 2015 (Санкт-Петербург, 5 июня 2015)
http://spb2015.dotnext.ru/#cvetkih_talk
Similar to Есть ли жизнь с ORM или типовая архитектура CRUD приложения (20)
4. Приложение
• Single Page App (SPA) with backend
• ~80% операций – Create, Read, Update, Delete (CRUD)
• Отчеты
• Database Driven Design
• Простая предметная логика
• Запросы в виде SQL внедрены в код
5. Проблемы
• Синхронизация схемы БД и кода приложения
• Что поменялось в БД?
• Изменения в схеме БД – какие SQL запросы это затронуло?
• Динамические структуры данных DataTable, Dictionary
• Схем объектов в коде нет. Определяются результатами SQL запросов
• Типы полей зависят от СУБД decimal если Oracle, double если MS SQL Server
• Поддержка нескольких СУБД
• Архитектурные решения не соблюдаются некоторыми
разработчиками
• Сложное развертывание / обновление
7. «Шаблон» приложения
• Успешно применен в 3 проектах
• Количество запросов на SQL стремится к нулю
За исключением пары-тройкиView и десятка хранимок
• Контроль соответствия кода и БД
• Переносимость блоков
Админка, справочники, отчёты, …
• Модифицируемость «шаблона» под текущие нужды без оглядки
на другие проекты
10. Heavy: Entity Framework
• Lazy Loading
• Миграции
• ChangeTracking
• Ассоциации Eager loading даже для коллекций
• LINQ
• Code first, Database first
11. Linq2DB
• Ассоциации Eager loading только для 1:1
• LINQ
• Bulk operations
• Оконные функции (Аналитические функции)
• Update и Delete с предикатом
• Custom’ные SQL функции и выражения в LINQ запросе
• Настраиваемые скриптыT4 для генерации модели на C#
• Расширяемость
• Отзывчивое сообщество на GitHub, быстро принимают pull request’ы
12. В чём сила, LINQ
• Запросы более предметные (ассоциации вместо join’ов)
• Запросы проверяются компилятором C#
• IntelliSense
• Легко производить рефакторинг, в том числе БД
• Проецирование
13. from q in query
from ls in db.PrRrlslayersortings.Where(ls => q.LclstrhistoryId == ls.LclstrhistoryId
&& q.Lsformation.LslayerId == ls.LslayerId).DefaultIfEmpty()
let f = new FormationInfo
{
КонсолидированноеГоловноеПредприятие = q.Lclstrhistory.Ddocompany.Parent.Shortname,
Предприятие = q.Lclstrhistory.Ddocompany.Shortname,
ПочтовыйАдрес = q.Lclstrhistory.Ddocompany.Mailingaddress,
ОКПО = q.Lclstrhistory.Ddocompany.Okpo,
ОКТМО = q.Lclstrhistory.Ddocompany.Oktmo,
ИНН = q.Lclstrhistory.Ddocompany.Inn,
КПП = q.Lclstrhistory.Ddocompany.Kpp,
…
НомерЛицензииИДатаРегистрации = q.License == null
? "лицензия не указана"
: $"{q.License.Series.Shortname}{q.License.No}{q.License.Kind.Shortname} от
{q.License.Begindate.ToShortDateString()}",
ЛицензионныйБлок = q.License == null
? "лицензия не указана"
: $"{q.License.Blockname} {q.License.Series.Shortname} {q.License.No}
{q.License.Kind.Shortname} {q.License.Begindate.ToShortDateString()}",
Лицензия = q.License == null
? "лицензия не указана“
: $"{q.License.Series.Shortname}{q.License.No}{q.License.Kind.Shortname}",
ГлубинаЗалеганияМин = q.Gasmindepth ?? q.Oilmindepth,
ГлубинаЗалеганияМакс = q.Gasmaxdepth ?? q.Oilmaxdepth,
// LEFT JOIN
// Ассоциации
// Базовый запрос
16. Анемичная предметная модель
• Генерируется с помощьюT4 по существующей БД
• Практически не содержит логики. Допускается в partial классах
• Всегда соответствует актуальной схеме
• Тонкий типизированный слой абстракции над БД
• После перегенерации нерабочий код не собирается. Знаем что
править
18. Прикладной уровень
• В виде WEB API контроллеров
• Процедурный стиль
• ~95% - это запросы на LINQ
• Защищает предметную модель
19. Типичный подход: сущность – клиенту
• Провоцирует загрязнение предметной
модели внешними проблемами: UI,
сериализация.
• Поля «сбоку» для нужд одной формы
• Чувствительная или системная информация
• Лишние для конкретных сценариев поля
• Поменяли схему сущности – а в какихView
она используется? Где исправлять?
Модель
WEB API
Клиент (JavaScript)
Company
Запрос /
Company
20. DataTransfer Object (DTO)
• Для каждого сценария – свой DTO
• Содержит только требуемые поля
сущности
• Какие угодно дополнительные поля
• Может автоматически преобразовываться
в/из сущности. Включая ассоциации
• Может составляться из нескольких
сущностей
• Применение DTO обязательно для всего
WEB API
Модель
WEB API
Клиент (JavaScript)
Company
CompanyDTO
Запрос /
CompanyDTO
Запрос /
Company
29. Отчёты
• Разрабатываются с помощью LINQ
• Именование классов кириллицей
• На каждый отчёт обязательный интеграционный тест
• Наличие интеграционного теста проверяется Unit test’ом
• Интеграционный тест – xUnit тест, но выполняются ночью или
под отладчиком.Требуется БД.
30.
31. Выполнение отчёта
• Отчёт может формироваться какое-то время (1-2 минуты)
• Формируем через персистентную очередь
• Для простого приложения, разрабатываемого одной командой,
достаточно Hangfire. Поддерживает MS SQL Server, Redis
33. Типичный подход к конфигурации
• Настройки в web.config, app.config
• Разработчик иногда меняет web/app.config
• assemblyBinding, DbProviderFactories, logging, …
• При обновлении на сервере приходится мержить (пропускать,
перезаписывать?) app/web.config
• В тяжелых случаях конфиги разбросаны по разным местам
34. Конфигурация. Наш подход
• Web/app.config = бинарники
• Все, что настраивается, в отдельном файле. Лучше в одном.
• В одном месте: App_Data/Cfg, bin/../Cfg
35. Где используется?
• OIS Запасы и ресурсы: Новая классификация запасов
• OIS ППР РБ: ИС Поддержки и принятия решений по развитию
ресурсной базы
• OISТехнолог
• OIS Ремонты