大家好,今天来为大家解答mvc模式的运行流程这个问题的一些问题点,包括mvc执行流程也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
mvc架构分析
MVC设计模式一般指MVC框架,M(Model)指数据模型层,V(View)指视图层,C(Controller)指控制层。使用MVC的目的是将M和V的实现代码分离,使同一个程序可以有不同的表现形式。其中,View的定义比较清晰,就是用户界面。
在Web项目的开发中,能够及时、正确地响应用户的请求是非常重要的。用户在网页上单击一个URL路径,这对Web服务器来说,相当于用户发送了一个请求。而获取请求后如何解析用户的输入,并执行相关处理逻辑,最终跳转至正确的页面显示反馈结果,这些工作往往是控制层(Controller)来完成的。
在请求的过程中,用户的信息被封装在User实体类中,该实体类在Web项目中属于数据模型层(Model)。
在请求显示阶段,跳转的结果网页就属于视图层(View)。
像这样,控制层负责前台与后台的交互,数据模型层封装用户的输入/输出数据,视图层选择恰当的视图来显示最终的执行结果,这样的层次分明的软件开发和处理流程被称为MVC模式。
mvc模式是什么
MVC(Model–View–Controller)模式是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC模式的目的是实现一种动态的程序设计,简化后续对程序的修改和扩展,并且使程序某一部分的重复利用成为可能。除此之外,MVC模式通过对复杂度的简化,使程序的结构更加直观。软件系统在分离了自身的基本部分的同时,也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长进行相关的分组:
模型(Model):程序员编写程序应有的功能(实现算法等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能);
控制器(Controller):负责转发请求,对请求进行处理;
视图(View):界面设计人员进行图形界面设计。
如何在Unity中实现MVC模式
在Unity游戏的开发当中,我并没有刻意地采用MVC框架,因为不像网站开发那样,Model,View,Controller在游戏这个领域里还没有很清晰的定义。究其原因,可能是由于不同游戏类型本身的软件架构可以相差很远,而且游戏里面的Object之间有大量的交互,所以垂直的MVC似乎不是十分应景。
然而,某种程度的分离代码逻辑是必要的,可以提高代码的可维护性和重用性。下面我说说自己的一些经验。
假设我们在做一个马里奥:对于游戏里的角色,我会采用这样一个结构。CharacterManager,它的作用是包含这个角色的Controller(s),并提供一个黑板(Blackboard)[1]。Controller,利用ReusableModels来处理角色在这个游戏中的某一状态的逻辑。ReusableModel,是一个虚的概念,并不是一个父类,通常这类Model都负责某一个特定的功能,可以重复利用,可看做游戏引擎的延伸。我会将CharacterManager和ReusableModel继承MonoBehavior,这样我们就能够直观地知道这个角色是什么类型的Character,并且可以利用inspector调节Model的参数。怎么将上面的架构应用在马里奥身上呢:作为CharacterManager,我们可以采用FiniteStateMachine或者BehaviorTree。一个好处是它们都天然地提供了“Controller”。例如FiniteStateMachine,它的每一个State都可以看作一个Controller。而BehaviorTree里面的ActionNode,也可以看作是一个Controller。
在每一个Controller里面,都会有指针指向一些ReusableModel。例如下图MoveState可以有一个MoveMotor,专门来实现GameObject的移动,而Sprite则封装GameObject的表现,如动画、旋转、位置等等。这些ReusableModel通常都提供丰富的参数可供调整,可以用于不同游戏当中。
用户输入和游戏里面的消息,则会暂存在CharacterManager里面的Blackboard里,供CharacterManager使用,让它决定是否需要更换Controller。例如马里奥里面我按左键,往左行动的信息会写在FSM的Blackboard里面,然后通过FSM的State转换机制[2],从IdleState转换到MoveState。这样的好处是,往左的信息可以从InputManager(图中没给出)那里得来,也可以从EnemyAIManager(图中没给出)那里得来。这样,一个类型(如拥有Idle,Move,Jump等状态)的FSM,就可以用在所有类似的角色身上,无论是玩家控制的还是AI控制的。
最终在Unity里面会是这样一个情况,FSM,Sprite,MoveMotor都作为Component,而Controllers则包含在FSM里面。以上方案虽然并不严格,但是在一定程度上提高了代码的可复用性和可维护性。例如现在我基本都把MoveMotor,Sprite等Model写好,新项目就直接扔进来就能用;MoveState,IdleState,JumpState等一些在平台游戏里常用的状态封装好,留出一些可调参数,例如状态间的转换。
[1]Blackboard的本质是一个Dictionary。[2]比较原始的FSM会将State转换直接放在State里面,但这样大大降低了State的可复用性。因此可以尝试将State的转换作为一个可调参数。一些可视化的FSM的原理也是这样,利用连线将两个State链接起来,然后通过定义一些转换的条件。
什么是mvc模式
MVC模式是一种软件设计模式,用于将应用程序分成三个不同的部分:模型、视图和控制器。M代表模型,代表存储和处理应用程序数据的部分。V代表视图,代表显示应用程序数据的部分。C代表控制器,代表协调模型和视图,处理和响应用户输入的部分。通过使用MVC模式,开发人员可以将应用程序的不同部分独立设计、测试和维护,实现代码的可复用性、易维护性和可扩展性。同时,MVC模式也可以帮助开发人员快速开发高效、易于使用的应用程序。
简述MVC设计模式各层的功能及实现技术
1)视图(View):代表用户交互界面,一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理。
2)模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计是MVC最主要的核心部分。业务模型包含一个很重要的模型——数据模型。数据模型主要指实体对象的数据保存(持久化),所有有关数据库的操作只限制在该模型中。
3)控制(Controller):可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。控制层并不做任何的数据处理。
关于mvc模式的运行流程和mvc执行流程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。