Re[6]: Вопрос специалистам
От: Dimsen  
Дата: 31.07.06 08:04
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Dimsen, Вы писали:


D>>Спасибо за ответы, но все же хотелось бы более универсального маппера.

D>>1С подобную проблему решила еще лет 7 назад и достаточно успешно ...

IT>Для того, чтобы получить тип данных объекта, получаемого из неизвестного источника, нужно, чтобы в приезжаемых данных можно было за что-то зацепиться. Чудес не бывает То, что 1С решает эти проблемы, так наверняка у них такие данные в каком-то виде есть, т.к. база данных в 1C имеет структуру специально заточенную под 1С. В частности, наверняка, если 1С допускает сохранение данных для разных объектов в одной записи, то какой-то идентификатор типа там должен присутствовать.


IT>Тоже самое можно сделать и в случае bltoolkit. Т.е. можно найти универсальное в пределах конкретной задачи решение.


Совершенно согласен, просто, в рамках заданного мною в первом посте вопроса, интересно узнать чужое мнение относительно наиболее эффективного варианта для решения поставленной задачи, при этом универсальность решения играет не последнюю роль. Например, в той же 1С эта задача решена крайне неэффективно (зато максимально универсально): там присутствует понятие составного типа данных (по сути дела VARIANT). Для хранения одного значения такого типа отводится 7 (!!!) полей таблицы базы данных: одно поле описывает тип данных, четыре поля могут хранить значение примитивного типа данных (число, строка, булево и дата), еще два поля отводятся для хранения ссылочного типа данных. Т.е. получается, что для хранения ссылочных типов данных используется три поля, хотя вполне достаточно было бы иметь два: идентификатор типа и непосредственно ссылка. При всем при этом 1С использует суффиксы в названиях полей таблиц базы данных.

Если говорить в общем и целом о, так сказать (не побоимся этого слова) паттерне данной задачи (Reference Resolver), то напрашивается вывод, что в основном используется поле-идентификатор типа, например: поле "ANIMAL" хранит ссылку на объект типа описываемого в поле "ANIMAL_TYPE". Вопрос также заключается и в том, есть ли более эффективный способ решения задачи (см. первый пост)? Как я уже писал, возможным вариантом решения проблемы может быть реализация паттерна "Реестр", где одна таблица имеет два поля: ссылка на объект + описание типа. Недостатком первого варианта является увеличение объемов данных, а второго варианта — потенциально огромный размер таблицы разрешения ссылок, а, следовательно, замедление процесса разрешения ссылок.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.