Я был склонен просто использовать шаблон mapper, который я уже использую в различных местах кода приложения. Но я подумал, что в данном конкретном случае это может быть не лучшим решением:
Задание:
-
Мне нужно реализовать объекты данных в соответствии с заданной спецификацией. Спецификация определяет несколько версий для каждого типа объекта, поэтому у меня есть, например, классы CarV1 и CarV2, представляющие каждую версию спецификации.
-
Мне нужно перевести эти модели между классами (в данном случае C++, но речь идет об общем дизайне) и форматами проводов (Json, Protocol Buffers) и наоборот.
-
Строительство объектов достаточно простое.
Как я уже сказал, я бы обычно использовал шаблон мапперов, определял интерфейс мапперов и конкретные мапперы для сопоставления между каждым форматом. Однако есть две причины, почему я спрашиваю ваше мнение в этом случае:
-
Я бы использовал шаблон отображения только для отображения между двумя и только двумя типами форматов, например, объектом базы данных и классом модели. У меня уже есть третий формат в этом случае, и, возможно, мне придется добавить больше форматов для перевода в ближайшем будущем.
-
Управление версиями добавляет сложности к отображению, и я думаю, что между ними должна быть другая косвенность.
Я читал о Translator Pattern [1], но никогда не использовал его. Я думаю, что это в какой-то степени подходит, но не полностью.
Я также рассматривал абстрактную фабрику. Это позволило бы создавать похожие объекты (в моем случае объекты контроля версий). Но это не очень подходит для отображения между представлениями объектов.
Какой шаблон я должен использовать и почему?
[1] http://www.iro.umontreal.ca/~keller/Layla/translator.pdf