MVC - 从一个模型到另一个模型的数据转换?

时间:2012-12-28 17:30:09

标签: oop model-view-controller transformation ooad object-oriented-analysis

在模型视图控制器模式中应该在哪里进行数据转换?

我有一个存储非常具体的数学数据的模型。我需要转换物理模拟器的数据(只接受某种格式的数据),我想知道它的代码应该放在哪里?一般来说,在哪里放置将一个模型转换为另一种模型的代码?

3 个答案:

答案 0 :(得分:2)

就个人而言,我喜欢将此代码放在派生类型的构造函数中。这样,进行转换的代码就在需要使用它的类中。我发现这种组织代码的方式使得理解,测试和维护更容易。

使用你的例子,假设你有一个类如下(你没有提到你正在使用的语言,所以我将在C#中给出下面的代码,但它在java中非常相似):

public class MathematicalData
{
     //members of class
}

假设您需要获取MathematicalData实例的成员并将它们转换为另一个名为PhysicsSimulator的类。我需要构造函数到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
    }
}

如果想要创建PhysicsSimulator实例的唯一方法是使用MathematicalData实例,那么我就不会为PhysicsSimulator创建默认构造函数。这样,创建PhysicsSimulator的唯一方法就是传入一个MathematicalData实例。

答案 1 :(得分:1)

在我看来,您需要设计一个Adapter接口来实现这一目标。使目标(PhysicsSimulator)的构造函数接受源(MathData)对象会将它们联系起来,以便当源因任何原因而发生变化时,目标 具有 改变。

适配器将限制对适配器的更改,并且不会强制目标更改源中的每个更改。

希望这有帮助。

答案 2 :(得分:0)

这是我遵循的MVC网络应用程序的典型模式。来自Web的输入落在模型中,然后控制器负责在调用业务层操作之前将Web模型转换为业务层模型。

为了防止控制器因转换代码而变得臃肿,只要合适,我就会将转换卸载到AutoMapper