# MVC架构 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: * Model(模型)表示应用程序核心(比如数据库记录列表)。 * View(视图)显示数据(数据库记录)。 * Controller(控制器)处理输入(写入数据库记录)。 * >Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。   通常模型对象负责在数据库中存取数据。 View(视图)是应用程序中处理数据显示的部分。   通常视图是依据模型数据创建的。 Controller(控制器)是应用程序中处理用户交互的部分。   通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。 MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。 MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。 ## SD框架中的MVC SD根目录中有个app文件夹,该文件夹作为业务逻辑存放的主文件夹。 * app/Controllers 存放控制器代码 * app/Models 存放模型代码 * app/Views 存放视图代码 * app/Tasks 存放同步任务代码 Controllers和Models下开发者可以继续细分文件夹,但要满足psr-4的规范,即代码的命名空间要与代码的存放目录一一对应。 在设计上Models目录下可以继续划分为业务层代码和数据层代码。 调用关系如下: Controller可以调用Model和Task,Model可以调用Model和Task,Task可以有选择的调用部分Model。 >Task为同步代码,如果Model中使用了异步客户端那么Task则不能调用该Model,框架对Redis和Mysql客户端进行了处理,可以自动切换在worker中使用异步在task中使用同步,所以Model中仅仅使用了redis或者mysql是可以在task中调用的。 >View视图,仅仅在Http中需要被使用,view本质上是模板文件。