在模型视图控制器模式中应该在哪里进行数据转换?
我有一个存储非常具体的数学数据的模型。我需要转换物理模拟器的数据(只接受某种格式的数据),我想知道它的代码应该放在哪里?一般来说,在哪里放置将一个模型转换为另一种模型的代码?
答案 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。