Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Рефактор SQLDataService и всего обвеса #69

Open
NicholasNoise opened this issue Nov 7, 2019 · 0 comments
Open

Рефактор SQLDataService и всего обвеса #69

NicholasNoise opened this issue Nov 7, 2019 · 0 comments

Comments

@NicholasNoise
Copy link
Contributor

NicholasNoise commented Nov 7, 2019

Цель

Базовая реализация SQL сервиса данных представляет собой очень жирный монолит, работу которого практически невозможно изменять с прикладной стороны, каждый баг или функциональная модификация сопровождается новыми багами или изменением API.

Функциональные требования

Далее будет много ссылок, которые ведут в основном на тэг v5.0.0 для защиты от изменений develop.

  1. DI в полной мере:
  • Убрать использования UnityFactory.GetContainer (1, 2)
  • Убрать использование инстанций (1)
  • Убрать использование ConfigurationManager (1)
  1. Разделить на несколько файлов:
  • Выделить делегаты в отдельные файлы (1)
  • Выделить методы LoadObject, LoadObjects, UpdateObject в отдельные partial файлы, аналогично методам UpdateObjects (1).
  • Выделить метод ConvertSimpleValueToQueryValueString (1) в сервис (связано с Поддержка кастомных типов данных без доработок сервисов данных 🚀 #59) (возможно вместе с методами ConvertValueToQueryValueString (1, 2)
  • Выделить методы по работе с IAuditService (1, 2) и ISecurityManager (1, 2, 3, 4, 5, 6) в отдельные partial файлы.
  • Выделить методы построения графа зависимостей (1, 2) в partial файл, а лучше в сервис.
  1. Дробление сложных методов:
  • GenerateSQLSelect - выделить часть, отвечающую за сортировку (1) (требуется для Maintaining rows order while ordering #68)
  • UpdateObjectsByExtConn и UpdateObjects (1, 2) - выделить части метода, в которой исполняются команды (1, 2), а также подготовка массива возвращаемых объектов в AfterUpdateObjects (1, 2)
  1. Изменение API:
  • GenerateQueriesForUpdateObjects (1) - заменить набор коллекций на класс, внутри которого будут скрыт этот бесконечный (1, 2) перечень параметров.
  • IDbConnection и IDbTransaction - заменить на DbTransactionWrapper (1)
  • Удалить метод CreateTransaction (1)

Требования к реализации

Сделать всё очень аккуратно, сломав обратную совместимость :)

Исходный код

Почти все интересные ссылки обозначены в первом разделе.

Проект на GitHub: https://github.com/Flexberry/NewPlatform.Flexberry.ORM
Ветка: develop (скорее всего после принятия #51)

Документация

Переписать документацию под новый API.

Тесты

Актуализировать тесты, которые сломаются из-за изменения API.

Примерная оценка трудоёмкости

40 часов.

Полезные ссылки, скриншоты

Во втором разделе.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants