从MVC到MVVC:软件架构的演变和迭代(一)https://developer.aliyun.com/article/1426328
4.MVC与MVVC比较
MVC与MVVC的异同点
MVC(Model-View-Controller)和MVVC(Model-View-View Model)是常见的软件架构设计模式,在思想、优缺点方面有很多不同和相似点:
相同点:
- 都解决了视图与模型之间的耦合问题,使得代码更加易于维护和拓展。
- 都强调了数据模型和业务逻辑与用户界面的分离,从而提高了软件的可维护性和可扩展性。
- 都支持对架构模式进行组件解耦和分离,方便代码复用,并提升的大型应用的整体开发效率。
不同点:
- MVVC在MVC模式的基础上新增了视图模型(
ViewModel
)层,该层起着对视图和模型之间进行解耦合连接的作用,而MVC中没有视图模型层。 - MVC负责掌控数据模型,View负责对数据进行渲染和呈现结果,Controller则负责业务逻辑的处理。而在MVVC中,View和ViewModel之间的绑定操作是靠数据绑定完成的。所以数据在ViewModel中处理完毕,才返回绑定到View上。
- 在MVC模式中,Controller需要处理View和Model,因此End-to-End测试很难爆发出错误。而MVVC模式下View、ViewModel和Model基本上都是三者独立互不影响的,因此End-to-End测试具有更好的可扩展性。
总的来说,MVC和MVVC都是常用的应用程序架构模式,它们的相似点包括解决代码耦合度问题,数据模型分离等方面。它们的不同点则在于MVVC新增的视图模型层、数据绑定等方面,这些特性更加便于数据模型的处理和应用程序的测试。
MVC与MVVC的优缺点对比
MVC(Model-View-Controller)和MVVC(Model-View-View Model)是两种常见的前端架构模式,它们在代码库的架构层面上实现了软件应用的各个方面的分离和降低了耦合度。
接下来对比一下MVC和MVVC的优缺点:
MVC优点
- 高度解耦合:MVC提供了组件解耦和分离,降低了应用程序的复杂度,提高了应用程序的可维护性和可拓展性。
- 易于维护: 每个模块暴露自己的接口和数据模型,找到问题和进行维护相对简单。
- 高可定制性:MVC增加了自定义的机会,让开发者灵活的进行修改和改造。
MVC缺点
- 视图与模型的耦合度高:MVC中,视图依赖于数据模型,这限制了应用程序的可重用性和可移植性。
- Controller代码很难维护:由于控制器承担着过多处理任务和逻辑,可能会导致控制器代码混乱不堪,难以维护。
MVVC优点
- 更好的性能和可拓展性:MVVC降低了控制器的复杂度,代码更易拓展和更加容易重复使用。
- 易于维护:MVVC提供良好的解决方案,确保我们能够更便捷地进行逻辑处理、页面更新以及数据操作过程。
- 易于测试:MVVC中,视图模型是处于解耦合状态中的,更加容易适应单元测试和真实应用场景。
MVVC缺点
- 学习成本高: 引入新视图模型层,增加了代码复杂度和学习成本。
- 代码结构复杂: MVVC中三个主要组建,增加代码量和复杂度。
- 项目开发周期较长: 需要耗费更多的时间进行需要的设计和开发, 项目开发周期相对MVC较长。
总结:MVC和MVVC
都在应用程序开发中得到广泛的应用,它们各自都有优点和缺点。而选用哪一种前端架构模式,全凭项目需求与开发者工作习惯来决定。
5.各自适用场景的探讨
MVC适用场景以及注意事项
MVC(Model-View-Controller)作为一种成熟的设计模式,在很多应用场景中都可以使用。以下是MVC适用的场景以及在使用MVC时需要注意的事项:
适用场景:
- 大型应用:对于大型应用,MVC 设计模式可以有效维护代码的组织结构,方便项目分配及扩展。
- 需要代码重用:MVC 设计模式鼓励程序员将代码分成模型、视图和控制器,并且重用其中的代码。
- 处理数据量大的应用程序:MVC 设计模式特别适用于需要处理大量数据的应用程序,如 Web 应用程序、桌面应用程序等。
注意事项:
- 维护良好的代码结构:MVC设计模式中,应该合理地组织代码结构,将模型、视图和控制器逻辑分离,保证代码易于维护和拓展。
- 及时处理视图逻辑:在MVC模式中,视图主要负责数据呈现和用户输入。确保及时处理视图逻辑,以保证视图不做过多的操纵逻辑和数据查询操作。
- 控制器不要含太多业务逻辑:控制器负责协调用户输入和数据模型之间的转换,但应该尽可能地不将过多的业务逻辑放在控制器中。过多的业务逻辑会影响代码的可读性和可维护性。
- 相互分离,互不依赖:即使各个部分互相依赖,也应该使它们之间的耦合度更低,尤其是 View 和 Model,互不依赖,最好是通过 Controller 来连接他们。
- 不要忽视前端后端开发的差异性:MVC模式在前端和后端编程中通常都能发挥很好的作用,但它们的目标是不同的。在前端,MVC主要关注的是视觉效果;而在后端,模型通常才是核心关注对象。
综上所述,MVC模式是非常成熟的软件架构设计模式
,在实际项目中也有着广泛应用。使用MVC时,需要注意代码结构的良好维护、控制器业务逻辑不要太多等注意事项,以确保代码易于维护和拓展。
MVVC适用场景以及注意事项
MVVC(Model-View-View Model)是一个在前端开发中广泛使用的架构模式。在一些场景下,MVVC比MVC模式更具优势。以下是MVVC适用的场景以及在使用MVVC时需要注意的事项:
适用场景:
- 大规模应用:对于大规模应用程序,MVVC可以有效降低应用程序的复杂度,并提高代码的组织性。
- 对视图的高可复用性要求较高:MVVC可以减少代码的重复编写,提高视图的复用率和可维护性。
- 需要跨平台开发的应用:MVVC模式使得视图模型层和数据模型层分离,便于不同平台上的适配性和应用的开发。
注意事项:
- 维护良好的代码结构:MVVC设计模式中,应该划分好各个组件的职责,如视图、视图模型和模型,确保代码易于维护和拓展。
- 好的数据绑定方案:MVVC 的关键在于视图和视图模型之间的一一绑定。因此,在使用MVVC时,应该选择好的数据绑定方案,确保它的高效和可靠性。
- 处理好异步和回调:因为在MVVC模式中,视图模型和模型都可以是异步调用的形式,特别是在异步调用场景下,需要注意好异步调用的顺序和回调函数的处理方式。
- 正确处理视图状态:因为MVVC模式中视图的状态会由视图模型来控制,所以应该控制好视图的状态变化流程,确保不会导致视图状态混乱。
- 控制好网络请求开销:MVVC应用程序设计,适用于数据操作比较频繁、数据量很大的场景, 当做网络请求时应该注意避免网络开销问题。
综上所述,MVVC 模式是在前端开发中广泛使用的模式之一。不同于 MVC,MVVC 模式注重视图和视图模型之间的数据绑定,提高前端开发效率。在使用 MVVC 模式时需要注意代码维护的好结构、数据绑定、视图状态等问题,并合理控制网络请求开销,以提升应用程序的性能和稳定性。
6.案例分析
案例一:应用MVC架构的Web应用
应用MVC架构的Web应用的实现需要遵循MVC设计模式的分层架构,将应用程序划分为模型层、视图层和控制器层。其中:
- 模型层:模型层负责数据库的操作以及业务逻辑的处理工作。它通常是应用程序的核心,用来处理数据和数据库操作。在Web应用中,模型层通常包含与数据库交互的数据模型,以及业务逻辑和数据验证的组件。
- 视图层:视图层是用户界面和用户体验的重要部分,它一般负责应用程序的呈现和交互。在Web应用中,视图层通常使用HTML、CSS和JavaScript等技术实现页面的呈现和交互。
- 控制器层:控制器层负责协调模型层和视图层之间的交互,接收用户的请求并做出响应。在Web应用中,控制器层通常是中心控制点,用于响应Web API请求,并返回模板或数据。
在应用MVC架构的Web应用中,需要注意以下几点:
- 规范化命名:MVC中的模型、视图、控制器层,都应该被命名规范化。
- 建议使用ORM:在处理数据库操作时,建议使用ORM框架,以便更容易进行数据持久化操作、简化数据库操作。
- 代码分离:应用MVC架构时,需要注意对代码的分离管理,确保每个层级的代码更加清晰易读,并且便于维护和拓展。
- 表现逻辑和业务逻辑分离:在MVC架构中,不建议将表现逻辑和业务逻辑混合在一起。应该优先处理好业务逻辑,然后再考虑表现逻辑的展示。
总的来说,应用MVC架构的Web应用是一种常用的Web应用程序设计模式。通过规划、划分和分离程序的代码,可以提高程序的可读性和可维护性。还可以优化软件架构和代码的复用性等方面,从而进一步提高程序的性能和可靠性。
案例二:应用MVVC架构的移动端应用
应用MVVC架构的移动端应用是一种基于Model-View-ViewModel(MVVM)的架构模式。
它由视图层、视图模型层和数据模型层组成,具有以下几点特点:
- 视图层:视图层就是应用程序的用户接口。它由XML、布局和UI元素组成,负责显示数据和处理用户交互。在MVVM中,视图层通过数据绑定机制与视图模型层相关联。
- 视图模型层:视图模型层是MVVM的核心部分。它负责将数据模型转换为视图所需的数据格式,处理视图层的用户交互事件,并根据数据模型的变化更新视图层。在MVVM中,视图模型层通常使用可观察对象(Observable objects)实现数据绑定机制,以及命令模式(Command pattern)实现和处理用户交互事件。
- 数据模型层:数据模型层用于获取和处理数据。它通常是一个独立的组件,负责向数据库或Web服务发送请求,然后将获取到的数据转换为应用程序可用的数据格式。
在应用MVVM架构的移动端应用中,需要注意以下几点:
- 维护良好的代码结构:应用MVVM架构需要保持代码结构良好和清晰。不同的组件的职责应该尽量分离,避免代码逻辑混淆和不必要的耦合,以提高代码的可维护性和可重用性。
- 使用框架和库:应用MVVM架构需要使用Android或iOS上的MVVM框架和库,如Android Jetpack或RxSwift等。它们可以帮助你更快速地构建应用程序,并提供MVVM模式下的关键功能。
- 正确处理数据绑定和响应式编程:应用MVVM架构,需要注意好数据绑定和响应式编程,以确保应用程序的性能和流畅性。在处理视图模型和数据模型之间的数据通信时,避免频繁查询数据和尽可能地复用数据,使应用程序更加高效、稳定和可靠。
- 控制好网络请求开销:在应用MVVM架构的移动端应用中,要注意控制网络请求开销,可以使用缓存策略、请求合并和数据预加载等方式来减少网络请求次数和优化数据传输,以减少应用程序的网络负载。
综上所述,应用MVVM架构的移动端应用可以使代码重用性和可维护性更高,是一种对移动端应用程序进行开发和设计的较为高效、稳定和可靠的方式。
7.结论
MVC与MVVC的综合评估
MVC
(Model-View-Controller)和MVVC
(Model-View-View Model)都是前端架构模式中常用的两种模式。两种模式有各自的特点和优缺点,并且适用的场景也有所不同。我们可以进行综合评估:
- 代码解耦和分离:MVC和MVVC都是通过将代码解耦和分离来提高代码的可维护性和可拓展性,但MVVC在更加注重数据绑定和可重用性方面做的更好。
- 性能问题:
MVVM中的ViewModel层
,几乎将前端开发所需的数据包含而在前端本地处理,不需要后端再进行处理,使得前端性能得到极大的提升。而MVC不具备这方面的优势。 - 视图状态:
MVVM利用双向绑定的方式,在界面修改数据时自动更新到页面上
,在数据修改时可以有效地控制视图的状态。而MVC需要依赖控制器(Controller)来对视图处理 - 学习成本:MVC的学习成本相对较低,而MVVM因为ViewModel的加入,比MVC复杂一些,学习成本可能相对较高。
总体来说,MVC和MVVM都有各自的优势,根据实际的项目需求和开发者工作习惯作出选择。MVC模式适用于中小型应用程序及业务逻辑比较简单的项目,而MVVM适用于对代码组织和代码结构要求比较高、在大型项目中易于维护、可以提高代码的复用性。