【知识经验贴】学MVC34恨EF和LINQ喜ADO.NET迷MODEL的菜鸟进
本帖最后由 qiqicancan 于 2012-11-08 12:08:44 编辑
前言
心血原著,希望耐心看完。欢迎跟帖讨论,希望得到大家的认可。我发知识贴还要用分?帮到了谁请把分还我。
因种种原因,本人从csdn上获得过很多帮助,做的贡献却比较少,有些过意不去,特发此文给迷途小白一些建议,希望能帮助你们快速走过我曾经历
的迷雾,也算是还给CSDN心中的人情。
本文针对的对象是像我一样对ASP比较熟悉,用.net也写过点东西,一般是用ADO,但在学微软的MVC3、MVC4过程中却死都搞不清模块、基架是怎么回
事,为什么要这么用……
如果你有下列症状之一,请继续看下去:
“我就喜欢手工控制每行代码,不要你微软自动生成”
“我用sql语句用得很爽啊,打死不学LINQ应该怎么写,累!!”
“像那些EF框架的例子那样,写个model就直接生成数据库,干嘛要用模块啊,直接搞数据库不完了吗”
“各种教程的例子全是音乐商店,LINQ、数据库上下文,说得简单,看着那么复杂,什么跟什么啊,最原始的情况到底是什么?”
……
如果你有下列症状之一,请离开:
喷子。我写的东西对你没用,你可以走,别在这打击我们。我们水平不高,但有享受编程乐趣的权利。你厉害,你自己玩去。
比小白还白的人。没有基本的编程能力;没写过(哪怕在课堂上)任何的数据库操作(增删改查);对MVC1234没有大致了解并思考过的人。如果你
连数据库的连接字符串是什么都没搞清楚的话,真的建议你别在这里浪费时间。我不会说这些的。
如果你是高手,希望博你一笑,能不吝赐教更是不胜荣幸!
本文尽量不涉及代码,更不提及眼花缭乱的各种操作……尽量。
绪论
MVC3说,编程是这样的:
1、 你数据库的表是啥样,就写个对应的类(模型)来描述它,然后在下面按指定格式写个数据库上下文用来操作数据库。
2、 按个按钮,数据库就自动生成好了,以这个模型为基础的控制器和视图也都生成好了,你自己在这个基础上修修补补就能用了。干这个活的
东西,微软叫做EF。至于怎么从控制器控制数据库的,那是EF的事,你不用知道。你想改都不知道改哪。想调用ef?用linq吧。想不用linq?微软不
说话了;大神们各种教材都在说:“其实用什么都可以,是一样的,EF在底层也是ado.net。”怎么个一样法,怎么做?各位大神不屑于说明,可苦
了我这样的小菜了。
EF教材中的一点缺陷:网上也有人提到,当从一个模型需要向多个表写数据的时候,自动生成的代码有些郁闷,因为你不知道怎么修正,在哪修正EF
生成的东西(也许是底层的东西,不重要,反正我不知道在哪弄)
要解决这些问题,按自己的想法写东西,是我要说的。
正文
说明一下业务的逻辑。结合一些软件构架的知识,正确的MVC框架应该是5层而不是3层。
你想象一个自己在前台填写一份个人信息,后台需要写到数据库的两张表T1(比如身高体重)、T2(比如社会关系)里的情况。
即:
视图(V,用户界面)
控制器(C,得到你写的东西,做些必要的预处理,然后决定调用某模型的写入方法)
模型(M,这里是重点)M里面含着一个你填写的表(不是数据库表)的描述,即class;还有对这张表的所有操作,增删改查等。注意:模型描述的
应该是业务,即你填写的东西,而不是数据库里记录的样子,即T1T2。这里的模型更像是软件构架里讲到的BLL,即商务逻辑层。也许你会觉得它和C
一起才是BLL,无所谓,who care。在模型的操作(本例是增加操作,类似模型类中的public void add(M)方法,暂时叫做A)中,调用数据库的操作
函数(最好自己写一个用着顺手的,稍后会提到,暂时叫做B)分别写入T1和T2。整个模型类似于下面的样子:
Class 模型名
{
Public Int x…..
…
…
Public void add()//这个也就是上一段提到的A啦
{
String sql1=你用模型对象的前N个参数构建的sql语句;
String sql2=你用模型对象的后M个参数构建的sql语句;
B(sql1);
B(sql2);
}
}
看到了吗?对数据库的写入逻辑操作可以自己写在这里。控制器里直接对视图提交过来的模型(比如是M1)直接写M1.ADD()就行了。
数据访问层(DAL)应该是第四层,它只管操作数据库。也就是上面提到的B。这个建议自己写,最好能操作所有的常用数据库,至少也要写个自己用
着顺手的操作自己常用类型数据库的函数。
别怕,第五层很简单,就是数据库,呵呵……被DAL操作的。
差不多了,该吃饭了。欢迎跟帖,可酌情展开。
------解决方案--------------------我前几年有和你同样的想法。
后来我慢慢的改变了看法,用原生态的也不错。照着ms mvc框架的思路写代码也挺优雅的。
哈哈
不过你现在的观点我也是支持的
------解决方案--------------------楼猪,你的心情我真心的理解。一起高飞、
------解决方案--------------------习惯就好,以前和你一样,但是现在用起来还不是一样的,只是一个 ORM 而已