MVC - Преобразование данных из одной модели в другую?

В шаблоне Model View Controller, где должно происходить преобразование данных?

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

3 ответа

Решение

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

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

public class MathematicalData
{
     //members of class
}

Допустим, вам нужно взять члены экземпляра MatumaticData и преобразовать их в другой класс с именем PhysicsSimulator. Я бы потребовал, чтобы конструктор PhysicsSimulator взял экземпляр MateticData в качестве входного параметра, а затем заполнил члены 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
    }
}

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

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

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

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

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

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

Другие вопросы по тегам