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

Поддержка кастомных типов данных без доработок сервисов данных 🚀 #59

Open
bratchikov opened this issue Sep 23, 2019 · 3 comments · Fixed by #80
Milestone

Comments

@bratchikov
Copy link
Member

Цель

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

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

Требуется реализовать интерфейс, который позволит избавиться от необходимости уникальным образом обрабатывать кастомные типы данных на уровне самого сервиса данных. В качестве примера можно привести типы данных ГИСа, файловые типы. В данный момент без доработки DataService или без наследования невозможно ввести сложный тип. Надо преодолеть эту проблему. Обратная совместимость должна остаться.

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

В данный момент есть атрибут StoreInstancesInTypeAttribute, который задаёт соответствие кастомного типа типу данных в C#. Проблема в том, что этого недостаточно для формирования корректного SQL.
Реализация GisMSSQLDataService указывает на то, что нужно реализовать интерфейс, включающий в себя реализацию метода, аналогичного ConvertValueToQueryValueString и FunctionToSql.
Данный интерфейс должен использоваться ORM-ом для обработки кастомного типа, если тип поддерживает этот интерфейс.

Исходный код

Этот проект. Создать feature-ветку от develop.

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

Отразить изменения в документации по ORM.

Тесты

Добавить тест, который позволит проверять добавленную функциональность.

Аналоги, примеры реализации

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

24ч

@NicholasNoise
Copy link
Contributor

@NicholasNoise
Copy link
Contributor

Кажется, что стоит вынести всё тело метода SQLDataService.ConvertSimpleValueToQueryValueString в отдельный сервис. Где-то внутри него добавить приведение объекта к создаваемому интерфейсу и вызов метода конверсии в строку, реализующего метод интерфейса.

@StenvL
Copy link
Contributor

StenvL commented Jan 22, 2020

Не стоит ли также в рамках данного issue реализовать добавление кастомной логики проверки на равенство двух объектов? Сейчас сравнение происходит здесь.

Если рассмотреть пример с тем же JObject ( #30 ), то равенство двух JObject проверяется при помощи метода JObject.DeepEquals, и сейчас нормального сравнения JObject можно достичь только модифицируя ORM, что несколько противоречит идее данного issue (в теории можно сравнить JObject-ы путём приведения их к строке в самом простом виде, но корректнее всё-таки через метод DeepQuals).

Как вариант реализации подобного - создать сервис для работы с реализацией данного интерфейса, получать его в сборке ICSSoft.STORMNET.DataObject и в классе Information (здесь) проверить, необходимо ли проводить сравнение по кастомной логике, либо же по стандартной.

@bratchikov bratchikov reopened this Jan 22, 2020
@bratchikov bratchikov modified the milestones: 5.2, 7.0 Aug 9, 2021
@bratchikov bratchikov changed the title Поддержка кастомных типов данных без доработок сервисов данных Поддержка кастомных типов данных без доработок сервисов данных 🚀 Sep 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Development

Successfully merging a pull request may close this issue.

5 participants