在开发图形界面应用程序的时候,为求更好的管理应用程序的复杂性,基于职责分离的思想会对应用程序进行分层,把管理用户界面的层次称为View,管理应用程序数据的层次称为Model。
有了View和Model的分层,那么就有了个问题:View如何同步Model的变更?
为了解决这样的问题于是就有了MVC架构模式。
这里需要注意:
1.Model指的是Domain Model,是应用程序对需要解决的问题的数据抽象,不包含应用的状态,可以简单理解为对象。
2.Model层不应该包含应用程序的业务逻辑,而是只保存数据结构和提供数据操作的接口。但是Model在进行数据操作时候也会涉及到相关的业务逻辑。
所以这里应该要注意把应用程序的业务逻辑与数据操作的业务逻辑做区别。
在MVC模式中Model应该包含数据操作的业务逻辑,而Controller包含的是应用程序的业务逻辑。
这两种业务逻辑怎么做区分呢?举个例子,假如在登录过程中需要验证用户输入的有效性和对密码进行加密,那么验证用户输入的有效性就是应用程序的业务逻辑,需要在Controller来实现,而对密码进行加密是对数据进行的操作,是属于数据操作的业务逻辑应在Model实现。
MVC的依赖关系
MVC把应用程序分成View、Model层,Controller层。Controller的职责就是专门管理应用程序的业务逻辑。Model、View、Controller三个层次的依赖关系如下:
MVC的调用关系
用户的对View操作以后,View捕获到这个操作,会把处理的权利交移给Controller,Controller接着会执行相关的业务逻辑,这些业务逻辑可能需要对Model进行相应的操作,当Model变更了以后,会通过观察者模式通知View,View收到Model变更的消息以后,会向Model请求最新的数据,然后重新更新界面。如下图: