私は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 層アーキテクチャでは発生しません)。