另类MVC模式 - 优势及实现

发表于

继续大逆不道系列…… 在上一篇中,提出了一个另类的MVC模型,与经典MVC模型有一些不同,那么自然需要描述这样的另类模型有什么优势,又能在怎么样的场景中使用。 逻辑划分 正如上一篇所说,这种模式下,最大的优势莫过于逻辑的清晰划分。在该模式的作用下,每一个Action都只要处理真正与自己有关的逻辑及数据,而不需要关心一些“通用”的内容,因为这些通用内容也成了独立的Action。 例如,继续引用上一篇中的页面设计,根据经典的MVC模式,我们不得不在一个Action中准备所有数据: public ActionResult ViewPost(int id) { ViewBag.

另类MVC模式 - 思考和雏形

发表于

这是一篇大逆不道的文章,其作用就是供大家娱乐以及批斗,因为此文所提及的思想,试图改变现有的著名模式MVC的结构,因此如果认为MVC优秀甚至完美的话,还请直接忽略此文,以免影响心情。 本文将提出一种类似MVC但又不完全是现有的经典MVC的模式,该模式仅基于HTTP的Web系统中对经典的MVC模式进行改造,其特点是将View前置,通过View的切分来切分逻辑,形成多次M-V-C交互,最终生成响应。 经典MVC模式 对于经典的MVC模式,虽然从表面上看完全是个“不需要解释”的问题,但是每个人的理解又不尽相同。在我的理解中,MVC模式可以用下面这张图来表达: 基于HTTP的Web系统里,在经典的MVC模式中,一个请求的处理过程大致分为: Controller处理原始请求,根据请求的数据与系统的配置,

单页系统前端MVC设计 – MVVM模式

发表于

在上一篇中,Action已经可以获取所有需要的数据,下一步就是将数据与视图中的控件树进行关联,使得View模块可以获取、修改数据,并通过与Action的进一步交互来完成整个业务逻辑。 MVVM模式 在介绍本文的ValueStack和ModelDescriptor这两个在整个框架中意义非凡的组件之前,需要先简单地介绍一下MVVM模式。 这个MVC框架引入了MVVM模式,MVVM模式的全称是Model-View-ViewModel模式。该模式顾名思义地有三个部分组成: Model:即数据,所有可持久化和不可持久化的,与业务有着关系的内容都可以被称为数据。Model的数据是扁平的,为了区别下面的ViewModel,这里可以称之为FlatModel。 例如,一个系统有用户,以及用户发表的文章,期间是1:n的关系,那么Model就存在两条数据。其一为user,

单页系统前端MVC设计 – 获取数据

发表于

一个单页系统中,由于浏览器始终不能离开当前页面,从而无法利用服务器端的动态页面(ASP、JSP、PHP等)将数据与页面结合起来,数据与表现相比单独的页面请求分离得更为彻底。其中数据获取的部分,通常使用的是AJAX的技术,利用XMLHttpRequest向服务器请求数据。 我在很多篇文章中提到过,现有互联网的大部分应用是数据驱动的,数据是整个业务的核心和关键所在。在框架的执行过程中,Action同样需要数据才可以驱动整个界面的渲染及交互,因此当Action进入自身的执行流程时,第一件事就是将自己需要的所有数据获取过来。 Action流程 Action从execute开始,到renderView绘制视图,并在之后与视图进行交互,其执行流程如下所述: 调用execute函数开始流程。 调用prepareData函数,该函数中利用DataProxy组件获取数据。

单页系统前端MVC设计 – ActionMapping过程

发表于

上一篇讲到通过对外暴露LocationManager组件,提供接口进行redirect等操作,可以形成一个Request对象交给Controller(即调用Controller的process函数)。 本篇主要讲述Controller如何处理一个Request,包括通过Request查找到对应的Action,并准备好上下文对象,交进而进入到Action的执行流程中。 Request对象 类似服务器端的MVC框架,Request对象将提供对一次请求中所能接触到的所有内容的封装,其会包含以下内容: url、path、query属性,对应window.location的href、pathname和search属性,表示整个请求资源符或者其中的一部分。 getParameter(key)函数,获取query中某个键对应的值。 getSession(key)函数,