2

Model View Controller パターンでは、どこでデータ変換を行う必要がありますか?

非常に具体的な数学的データを格納するモデルがあります。そのデータを物理シミュレーター (特定の形式のデータのみを受け入れる) 用に変換する必要があり、そのためのコードをどこに置くべきか疑問に思っています。一般に、あるモデルを別のタイプのモデルに変換するコードをどこに配置しますか?

4

3 に答える 3

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 インスタンスを渡すことです。

于 2012-12-28T17:42:17.460 に答える
1

これを実現するには、アダプタインターフェイスを設計する必要があるように思われます。target(PhysicsSimulator)のコンストラクターにsource()オブジェクトを受け入れさせると、MathData何らかの理由でソースが変更されたときにターゲットを変更する必要があるように、両方が結び付けられます。

アダプタはアダプタへの変更を制限し、ソースの変更ごとにターゲットを強制的に変更することはありません。

お役に立てれば。

于 2013-01-30T10:00:01.543 に答える
0

これは、MVCWebアプリで私が従う典型的なパターンです。Webからの入力がモデルに到達すると、コントローラーは、ビジネス層アクションを呼び出す前に、Webモデルをビジネス層モデルに変換する責任を負います。

コントローラが変換コードで肥大化するのを防ぐために、適切な場合はいつでも変換をAutoMapperにオフロードします。

于 2012-12-28T17:48:43.590 に答える