public void DisableAcceleration()
{
this.btnAccelerate.Enabled = false;
}
public void EnableAcceleration()
{
this.btnAccelerate.Enabled = true;
}
public void DisableDeceleration()
{
this.btnDecelerate.Enabled = false;
}
public void EnableDeceleration()
{
this.btnDecelerate.Enabled = true;
}
public void DisableTurning()
{
this.btnRight.Enabled = this.btnLeft.Enabled = false;
}
public void EnableTurning()
{
this.btnRight.Enabled = this.btnLeft.Enabled = true;
}
public void Update(IVehicleModel paramModel)
{
this.UpdateInterface(paramModel);
}
我們終於結束了!!!現在我們可以來測試ACME2000 Sports Car了。一切按計劃進行,然後我們找到ACME的主管人員,但他想要開一個載貨卡車而不是運動車。
幸運的是我們用的是MVC!我們需要做的所有工作就是建立一個新的ACMETruck類,包裝一下,完事!
public class ACME2000Truck: Automobile
{
public ACME2000Truck(string paramName):base(80, 25, -12, paramName){}
public ACME2000Truck(string paramName, int paramMaxSpeed, int paramMaxTurnSpeed,
int paramMaxReverseSpeed):
base(paramMaxSpeed, paramMaxTurnSpeed, paramMaxReverseSpeed, paramName){}
}
在AutoVIEw中,我們只需要建立卡車包裝一下!
private void btnBuildNew_Click(object sender, System.EventArgs e)
{
this.autoVIEw1.WireUp(new ACME.AutomobileControl(), new ACME.ACME2000Truck(this.txtName.Text));
}
如果我們想要一個新Control只允許我們來每次加速或減速最大5mph,小意思!做一個SlowPokeControl(和我們的AutoControl相同,但是在申請加速度中做了限制)。
public void RequestAccelerate(int paramAmount)
{
if(Model != null)
{
int amount = paramAmount;
if(amount > 5) amount = 5;
Model.Accelerate(amount);
if(View != null) SetVIEw();
}
}
public void RequestDecelerate(int paramAmount)
{
if(Model != null)
{
int amount = paramAmount;
if(amount > 5) amount = 5;
Model.Accelerate(amount);
Model.Decelerate(amount);
if(View != null) SetVIEw();
}
}
如果我們想讓我們的ACME2000 Truck變得遲鈍,只需要在AutoVIEw中包裝。
private void btnBuildNew_Click(object sender, System.EventArgs e)
{
this.autoVIEw1.WireUp(new ACME.SlowPokeControl(), new ACME.ACME2000Truck(this.txtName.Text));
}
最後,如果我們需要一個在web上的接口,我們要做的所有工作就是建立一個Web項目在UserControl中實現IVehicleVIEw接口。
結論
正如你所看到的,使用MVC來構建代碼控制接口耦合性很低,很容易適應需求的改變。它也能使變化的影響減小,而且你可以在任何地方重用你的虛函數和接口。有很多時候我們可以在我們的項目中實現伸縮性,特別是在那些需求變化的時候,但是這需要下次再說了。