3

私はMVCパターンを学んでいます。この非常に単純なコードをデモとして作成しました。

コードのターゲットは単純です。初速度が時速 95 マイルの自動車オブジェクトを作成しました。現在の速度を表示する 1 つのラベル、2 つのボタン、速度の増加と減少があります。

各ボタンをクリックすると、速度が 1 ずつ増加または減少し、変更された速度がラベルに表示されます。速度が 100 を超えると、増加ボタンが無効になり、ユーザーは速度を下げることしかできなくなります。速度が 100 を下回ると、増加ボタンが再び有効になります。

これは、モデル、ビュー、およびコントローラーのコードです。

インターフェース IModel

public interface IModel
{
    int getCurrentSpeed();

    int increaseSpeed();
    int decreaseSpeed();

    void updateObserver();
    void setView(IView objView);
}

クラス carModel (IModel の具象クラス)

public class carModel : IModel
{
    private IView objLocalView;
    private int currentSpeed;

    //Constructor
    public carModel(int carSpeed)
    {
        this.currentSpeed = carSpeed;
    }

    public void setView(IView objView)
    {
        objLocalView = objView;
    }

    public int increaseSpeed()
    {
        currentSpeed++;
        updateObserver();
        return currentSpeed;
    }

    public int decreaseSpeed()
    {
        currentSpeed--;
        updateObserver();
        return currentSpeed;
    }

    public void updateObserver()
    {
        objLocalView.updateStatus(this);
    }

    public int getCurrentSpeed()
    {
        return currentSpeed;
    }

}

インターフェース IController

public interface IController
{
    void requestIncreaseSpeed();
    void requestDecreaseSpeed();
}

クラス carController (IController の具象クラス)

public class carController : IController
{
    private IModel objLocalModel;
    private IView objLocalView;

    //constructor
    public carController(IModel objModel, IView objView)
    {
        objLocalView = objView;
        objLocalModel = objModel;
        objLocalModel.setView(objView);
    }

    public void requestIncreaseSpeed()
    {
        int modifiedSpeed = objLocalModel.increaseSpeed();
        checkSpeedLimit(modifiedSpeed);
    }

    public void requestDecreaseSpeed()
    {
        int modifiedSpeed = objLocalModel.decreaseSpeed();
        checkSpeedLimit(modifiedSpeed);
    }

    public void checkSpeedLimit(int modifiedSpeed)
    {
        if (modifiedSpeed > 100)
        {
            objLocalView.disableIncreaseSpeed();
        }
        else
        {
            objLocalView.enableIncreaseSpeed();
        }
    }

}

インターフェイス IView

public interface IView
{
    void enableIncreaseSpeed();
    void disableIncreaseSpeed();

    void updateStatus(IModel objModel);
}

form1.cs (ユーザーに表示されるビュー クラス)

public partial class Form1 : Form, IView
{
    private IModel objModel;
    private IController objController;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        objModel = new carModel(95);
        objController = new carController(objModel, this);

        updateStatus(objModel);
    }

    public void enableIncreaseSpeed()
    {
        btnIncrease.Enabled = true;
    }

    public void disableIncreaseSpeed()
    {
        btnIncrease.Enabled = false;
    }

    public void updateStatus(IModel objModel)
    {
        lblCurrentSpeed.Text = "";
        lblCurrentSpeed.Text = objModel.getCurrentSpeed().ToString();
    }

    private void btnIncrease_Click(object sender, EventArgs e)
    {
        objController.requestIncreaseSpeed();
    }

    private void btnDecrease_Click(object sender, EventArgs e)
    {
        objController.requestDecreaseSpeed();
    }
}

これが適切な MVC 設計かどうかわかりません。通常の 3 層アーキテクチャとの大きな違いが見られないためです (モデルとビューがここで通信していることを除けば、3 層アーキテクチャでは発生しません)。

4

1 に答える 1

0

古典的な MVC を実装しようとしているので、情報の流れはほぼ正しいです。

少しずれているように見えるのは「モデル」だけです。モデルがクラスであると仮定しました。ええと...そうではありません。モデルは、すべてのドメイン ビジネス ロジックを含むレイヤーである必要があります。

于 2012-07-31T13:56:05.430 に答える