mvc 实战
最近一直研究mvc,并且现在做一个Demo程序,帮助公司竞标一个项目。当初选择mvc开发是基于以下的原因:第一是完全的和美工分离,第二是开发速度快,第三团队开发的时候更便于团队开发。
mvc最经典的是有一个图来解释其原理,这里就不在赘述了,我在这里主要说一下我的项目框架,我想和大家分享一下我现在用的技术和对mvc的应用实例,其次是希望能提出宝贵的意见,共同提高。
其实我认为mvc中最重要的就是model的设计,如果model设计的合理,那就可能给程序带来很大方面。model的功能主要对数据的处理,包括存储数据和处理数据。大部分的model都是和数据库中的表一一映射的,但是有些特殊的还需要二次封装。这是我对model的理解,然后在我做的项目,model只做了存储数据和传递数据。由于mvc是无状态的,我需要在某个View提交数据失败后,从新绑定值,如果我们不想手动绑定的话,就需要这个View是强类型的,及提交失败后,掉用View(model)方法后,其值会自动绑定上。mvc和Contrller是通过model来传递数据。由于数据库中的表无非是增,删,改,查四种操作,可以试想:mvc和Controller是通过Model来传递数据,加入我们为Model定义统一的主键名称和类型,是不是有些东西可以用面向对象的思想来进行某些分装呢??
这个时候我就想到了继承,我创建BaseController来封装各种操作,然后其余的Controller继承这个Controller,是不是就解决问题了??问题还远远没有解决,因为每个类的Model都不同,一个BaseConroller怎么能解决问题呢,这个时候我们就得感觉微软了,.net提供泛型,什么泛型类,泛型接口什么的,问题解决了。一个BaseController就构造完成了,但是我们还得规定View的命名规范,这样才能完成我们需要的功能。如果这样做起项目来,别人只需设计View和继承你的BaseController就可以了,但是这样的封装还是不完成的,不是么??
然而这个项目又规定了,所有的操作都放在存储过程完成。所以这个框架能不能实现根据model自动生成存储过程参数呢?所以这个时候我又实现了一个泛型类,来实现个功能,这个泛型只需传递一个T类型,然后通过反射便利model中所有的属性和值动态创建存储过程参数,但是怎么才能把model中的属性和数据库中的类型对应起来呢?这个问题可以通过特性来解决,每个属性上面标一个特性就可以了。这个泛型对外公布的接口有:添加一个T类型,更新,删除和转化成一个T类型,和设置其对性的存储过程。
这个时候这个框架基本上就完成数据库访问的模块,BaseController是泛型的,通用类也是泛型的。这个时候开放项目的时候,分工就更明确了,一部分专门写存储过程,一部分写Model,一部分人设计View,至于别的什么都不管了,是不是比以前的asp.net开发快多了??
这样程序的基础框架就确定了,至于辅助框架,例如日志模块设计和异常捕获模块,身份验证模块正在研究中。希望各位看后能给我留下宝贵的意见。本人QQ(378755476)