我们通常将软件三层架构与MVC混为一谈了,但我们不知道它们是否真的是同一个概念。现在我要告诉你一些我知道的真相。
首先,他们两个根本不是同一个概念。三层体系架构是一种分层的软件体系架构设计理念,可以应用于任何的项目之中。而MVC是一种设计模式,它根据项目的具体需求决定是否应用于项目。那么,架构和设计模式之间有什么区别呢?
我们从接手一个项目开始,首先,我们需要进行架构设计,这通常是分层结构设计,也就是我们的三层架构。然后,在确定了体系架构之后,我们考虑是否需要根据项目的具体需求应用一些设计模式,例如是否应用mvc模式、抽象工厂模式等等,在这里我们可以看到mvc与三层体系架构并不是在同一层,而它是与抽象工厂之类的设计模式相对应的。最后,在确定了设计模式之后,这是我们的一些具体实现。当然,一个项目不只是考虑这些问题,我只是试图解释两者之间的区别,而忽略了其他问题。
第二,他们分为不同的层次。三层体系结构将整个项目分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。MVC是分为了Model(模型)、View(视图)、Controller(控制器),不过同样是三层。
让我们看看它们之间的区别和联系:
从这个图表中,我们可以知道V是UI,C是BLL,M是DAL是错误的。我们通常看到的MVC也是基于三层体系架构的应用,即model随后被分层。如果model不再被划分,那么MVC的使用就没有什么意义了。那么,它们俩有着不同的目标。三层体系架构的目的是”高内聚、低耦合”,即解耦。而MVC的目的是实现Web系统的功能划分,即职责划分。事实上,职责划分也是脱钩的,但这三层侧重于整体的解耦,而MVC则侧重于Web系统的解耦,即jsp和servlet的解耦。
最后,我们为什么会混淆它们呢?既然两者之间有如此多的差异,为什么我们总是把它们混淆在一起?以下是我们经常把它们混为一谈的几个原因:
1.两者都是”三层”。
这是最容易混淆我们初学者的原因,一个是UI,BLL,DAL,另一个是view视图,controller控制器,model模型,不是全部三层吗?
虽然它们都是”三层”(不一定是真实的三层或多层),但从前面的讲解知道它们是不同的。
2.MVC总是伴随着三层体系架构。
这就是我以前反复强调的,我们通常考虑使用(或不能使用)三层架构,根据具体需要来决定是否使用mvc,所以我们经常说mvc总是伴随着三层架构,所以我们总是认为mvc是三层架构,三层体系架构是mvc,它们总是一起出现。
3.都是分层的,也就是说,它们都是为了解耦。
当我谈到他们的目的时,我也说过,虽然他们的关注点不同,但他们的总体目标是相同的,都是为了解耦。因此对于初学者,是不了解这两种优先级之间有什么区别。
我们通常对他们的关联了解很多,否则我们不会感到困惑且容易混淆,但我们对他们之间的差异了解较少。我希望我上面所解释的两者之间的差异能使你对他们有一点了解。