2

В шаблоне контроллера модели, где должно произойти преобразование данных?MVC - Преобразование данных из одной модели в другую?

У меня есть модель, в которой хранятся очень конкретные математические данные. Мне нужно преобразовать эти данные в физический симулятор (который принимает только данные в определенном формате), и мне интересно, где должен сидеть код для этого? В общем, где вы размещаете код, который преобразует одну модель в другой тип модели?

+0

Вы строите приложение для предприятий? –

+0

@BhushanFirake Я интегрирую два приложения – zehelvion

ответ

2

Лично я хотел бы поместить этот код в конструктор производного типа модели. Таким образом, код, который выполняет преобразование, находится в классе, который должен его использовать. Я нахожу, что этот способ организации кода упрощает понимание, тестирование и поддержку.

Используя ваш пример, скажем, у вас есть класс следующим образом (вы не упомянули, что язык вы используете, так что я дам ниже код в C#, но он очень похож на Java):

public class MathematicalData 
{ 
    //members of class 
} 

Предположим, вам нужно взять члены экземпляра MathematicalData и преобразовать их в другой класс с именем PhysicalSimulator. Я потребовал бы конструктор для PhysicsSimulator взять экземпляр MathematicalData в качестве входного параметра, а затем заполнить членов PhysicsSimulator в этом застройщик:

public class PhysicsSimulator 
{ 
    //constructor 
    public PhysicsSimulator(MathematicalData input) 
    { 
     //put code here to use the members of input to populate members of this instance of PhysicsSimulator 
    } 
} 

Если единственным способом вы хотите создать instace из PhysicsSimulator является используя экземпляр MathematicalData, тогда я бы не создал конструктор по умолчанию для PhysicsSimulator. Таким образом, единственный способ создать физический симулятор - это пройти в экземпляре MathematicalData.

+1

Вы намеревались сказать «Я бы не создал конструктор по умолчанию для PhysicalSimulator» в вашем последнем предложении? – CoderDennis

+1

К сожалению, я случайно набрал неправильный класс. Спасибо, Деннис, за это. Я исправил сообщение. –

+0

Мне нравится это предложение. Было бы невыгодно создавать новый класс под названием «MathDataBasedPhysicsSimulation», который наследуется от PhysicalSimulator и оставляет класс PhySim как есть? – zehelvion

0

Вот типичный образец, который я придерживаюсь для веб-приложения MVC. Вход с веб-сайтов в Модели, а затем Контроллер берет на себя ответственность за преобразование модели веб-модели в модель бизнес-уровня до вызова действия уровня бизнеса.

Чтобы не допустить раздувания контроллера с помощью кода трансформации, я отключу преобразования до AutoMapper всякий раз, когда это подходит.

+0

Я не совсем понимаю, что вы предлагаете в своем первом абзаце, но AutoMapper - хорошее предложение. – CoderDennis

+0

Это не «веб-MVC», это просто Rails-путь. –

1

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

Адаптер ограничивает изменения адаптера и не будет изменять цель для каждого изменения источника.

Надеюсь, это поможет.

+0

Спасибо, я не уверен, что понимаю. Почему PhysicalSimulator должен измениться при изменении MathData? Потому что нам нужно обновить конструктор? В другом случае нам не нужно будет менять адаптер? – zehelvion

+1

Вы правы @ArthurWulfWhite Адаптер должен измениться. Однако из-за того, что вы интегрируете два приложения, я предполагаю, что у них есть свои клиенты. Изменение конструктора «PhysicsSimulator» только потому, что «MathData» изменилось, заставит всех клиентов «PhysicsSimulator» изменить способ их использования (без видимых причин с точки зрения клиента). Поскольку адаптер предоставляет _interface_, который использует «PhysicsSimulator», изменения в адаптере становятся прозрачными для клиентов «PhysicsSimulator». Надеюсь, я ответил на ваш вопрос. –

+0

Теперь я понимаю, это интересное прозрение @ Сударшан Шубакар – zehelvion

Смежные вопросы