Automapper преобразование источника просто временно - PullRequest
0 голосов
/ 26 июня 2018

Я пишу общую возможность конвертировать из объекта базы данных в бизнес-объект.

Мой бизнес-объект содержит настраиваемые атрибуты, и в зависимости от них я люблю выполнять над ними определенные операции. При чтении из базы данных это довольно просто, потому что я могу использовать aftermap (не идеальное решение, потому что я должен сделать это с помощью отражения и установить значение в зависимости от него)

Но при обратной записи в базу данных я должен сделать это до Map, но это изменит исходный код, но мне просто нравится переходный процесс. Так что делайте операцию с Source на лету, но не меняйте исходный объект.

Это общая опция, поэтому я не могу работать со свойствами.

                protected static T MapFromDatabaseWithConversion<T, TSource>(TSource source) where T : MappingModel, new()
            {
                var config = new MapperConfiguration(cfg => cfg.CreateMap<TSource, T>().AfterMap((src, dest) => dest.ConvertFromDatabase()));
                return config.CreateMapper().Map<T>(source);
            }

Есть ли у вас какое-либо решение для проверки на лету атрибута свойства и изменения значения в зависимости от него - или у вас есть идея изменить источник только на лету, поэтому не записывайте результат операции источника в src OBJ

Большое спасибо.

1 Ответ

0 голосов
/ 20 сентября 2018

Я думаю, что вы должны включить отслеживание значений в ваших объектах. Для каждого члена класса вам понадобится логическое значение для отражения, если значение изменилось, и метод, который проверяет их все сразу, например isObjectChanged (). Вы можете жестко запрограммировать это или обернуть свой объект в объект Proxy во время выполнения, что является более сложным, но не загромождает ваш класс данными / методами отслеживания значений. С другой стороны, Java Data Objects (https://db.apache.org/jdo/)) может сделать это за вас, перекомпилировав ваши файлы классов, чтобы включить отслеживание значений в классе об изменении значений. Это займет немного времени для настройки и может быть излишним для Ваш конкретный вопрос, но я использовал его много раз при нацеливании на несколько источников данных в одном проекте, таких как база данных или электронная таблица. JDO позволяет мне использовать один и тот же код с другим менеджером типов данных, который можно менять во время выполнения. также предназначаются для базы данных No-SQL и других хранилищ данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...