快捷搜索:

Visual C#完成MVC模式简要方法

在我们的开发项目中使用MVC(Model-View-Control)模式的好处 是,可以完全下降 事务 层和应用表明 层的彼此 影响。此外,

我们会有完全独立的对象来操作表明 层。MVC在我们项目中提供的这种对象和层之间的独立,将使我们的维护变得更简略 使

我们的代码重用变得很容易(下面你将看到)。

作为一般的习惯,我们知道我们期望 坚持 最低的对象间的依赖,这样变化可以 很容易的得到满足,并且 我们可以反复

使用我们辛辛苦苦写的代码。为了达到这个用意我们将遵循一般的原则“对接口编成,而不是对类”来使用MVC模式。

我们的任务 ,假如 我们选择承受 它...

我们被委任构建一个ACME 2000 Sports Car项目,我们的任务 是做一个简略 的Windows画面来显示汽车的方向和速度,

使终端用户可以 改变方向,加速或是减速。当然将会有规模 的扩展。

在ACME现已 有了传言,假如 我们的项目成功,我们最终还要为ACME 2 Pickup Truck 和ACME 1 Tricycle开发一个相

似的接口。作为开发人员,我们也知道ACME管理团队最终将问“这样是很棒的,我们可以 在我们的intranet上看到它?”

所有的这些闪现 在脑海中,我们想交给 一个产品,使它可以 容易的晋级 以便可以 保证将来我们可以 有饭吃。

所以,同时我们抉择 “这是使用MVC的一个绝好情形”

我们的构架提要

现在我们知道我们要使用MVC,我们需要指出它的本质。通过我们的实验 得出MVC的三个部分:Model,Control和View。

在我们的体系 中,Model就是我们的汽车,View就是我们的画面,Control将这两个部分联络 起来。

为了改变Model(我们的ACME 2000 sports car),我们需要使用Control。我们的Control将会发生 给Model

(我们的ACME 2000 sports car)的请求,和更新View,View就是我们的画面(UI)。

这看起来很简略 ,但是 这里发生 了第一个要解决的问题:当终端用户想做一个对ACME 2000 sports car一个改变将

会发生什么,比如说加速或是转向?他们将通过View(our windows form)用Control来提出一个变化的请求 。

现在我们就剩下一个未解决问题了。假如 View没有必要的信息来显示Model的状态怎么办?我们需要再在我们的图中

加入一个箭头:View将能请求 Model的状态以便得到它要显示的相关状态信息。

终究 ,我们的最终用户(司机)将会和我们的ACME Vehicle Control体系 通过View来交互。假如 他们想发出一个改

变体系 的请求 ,比如提高一点加速度,请求 将会从View开始发出由Control处理。

Control将会向Model请求 改变并将必要的变化反映在View上。比如,假如 一个蛮横的司机对ACME 2000 Sports Car

做了一个"floor it"请求 ,而现内行 驶的太快不能转向,那么Control将会回绝 这个请求 并在View中告诉 ,这样就防止了

在交通拥堵 是发生凄惨 的连环相撞。

Model (the ACME 2000 Sports Car) 将告诉 View 它的速度现已 提高,而View也将做适当的更新。

综上,这就是我们将构建的概要:

初步

作为总是想的远一点的开发人员,我们想让我们的体系 有一个持久 并且杰出 的生命周期。这就是说可以 进可能的

准备好满足ACME的很多变化。为了做到这一点,我们知道要遵循两条原则...“保证你的类低耦合”,要达到这个

方针 ,还要“对接口编程”。

所以我们要做三个接口(正如你所猜想 ,一个Model接口,一个View接口,一个Control接口)。

通过 很多调查研讨 ,和与ACME人的费力咨询,我们得到了很多有关详细设计的信息。我们想确定我们可以设置的最

大速度内行 进 ,后退和转弯中。我们也需要可以 加速,减速,左转和右转。我们的仪表盘有必要 显示当时 的速度和方向。

完成 所有这些需求是十分 苛刻的,但是 我们确信我们可以 做到...

首要 ,我们考虑一下底子 的项目。我们需要一些东西来表明 方向和滚动 请求。我们做了两个枚举类型:

AbsoluteDirection 和 RelativeDirection。
public enum AbsoluteDirection
{
North=0, East, South, West
}
public enum RelativeDirection
{
Right, Left, Back
}

下面来解决Control接口。我们知道Control需要将请求传递给Model,这些请求包括:Accelerate, Decelerate,

和 Turn。我们建立一个IVehicleControl接口,并加入适当的方法。

public interface IVehicleControl
{
void Accelerate(int paramAmount);
void Decelerate(int paramAmount);
void Turn(RelativeDirection paramDirection);
}

现在我们来整理Model接口。我们需要知道汽车的名字,速度,最大速度,最大倒退速度,最大转弯速度和方向。

您可能还会对下面的文章感兴趣: