【知识经验贴】学MVC34恨EF和LINQ喜ADO.NET迷MODEL的菜鸟进

万金流 2012-11-08 12:02:36
前言

心血原著,希望耐心看完。欢迎跟帖讨论,希望得到大家的认可。我发知识贴还要用分?帮到了谁请把分还我。
因种种原因,本人从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操作的。

差不多了,该吃饭了。欢迎跟帖,可酌情展开。
...全文
382 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
万金流 2013-03-12
  • 打赏
  • 举报
回复
11#,细分东西很多,我认为到这个层面差不多了。还是那句话,献给入门的痛苦者,呵呵。。。 10#,忙了,也就没继续了。而且主要的东西都差不多了,展开举例叙述有点累,呵呵。。我懒,下次再说吧。
风骑士之怒 2012-11-13
  • 打赏
  • 举报
回复
看了许久,发现LZ是为了介绍三层架构吧,第五层说的应该是SQLHelper
ycproc 2012-11-13
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
感谢分享,好帖推荐是可以获赠可用分的。不过不知道你是没有写完还是怎么回事,没理解lz想说什么。
我也以为还有下文,想不到就没了。
引用 9 楼 qiqicancan 的回复:
我尽心了。结贴了,呵呵~
LZ继续吧!
万金流 2012-11-13
  • 打赏
  • 举报
回复
我尽心了。结贴了,呵呵~
隔壁老陈 2012-11-09
  • 打赏
  • 举报
回复
习惯就好,以前和你一样,但是现在用起来还不是一样的,只是一个 ORM 而已
heyanan523 2012-11-09
  • 打赏
  • 举报
回复
楼猪,你的心情我真心的理解。一起高飞、
zyug 2012-11-08
  • 打赏
  • 举报
回复
我前几年有和你同样的想法。 后来我慢慢的改变了看法,用原生态的也不错。照着ms mvc框架的思路写代码也挺优雅的。 哈哈 不过你现在的观点我也是支持的
zhouzangood 2012-11-08
  • 打赏
  • 举报
回复
markmark
万金流 2012-11-08
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
感谢分享,好帖推荐是可以获赠可用分的。不过不知道你是没有写完还是怎么回事,没理解lz想说什么。
哇,斑竹哎,你是我见到的最大的领导了,呵呵……谢谢关注。我写的是我这几个月迷茫的点,最后戳破的时候有种豁然的感觉,希望菜菜能快速飞过。 总的思路写完了,真的能帮到大家我可以继续完善细节。不想很累写的东西没人看。你可能已经飞太高了,体会不了我在纠结MVC3和看music store的模型、ef框架时候的纠结。那时候查遍网络要么是简单几句话,要么是连篇累牍的代码,折腾死我了。明明很简单的一层窗户纸,就没人伸个手指头。
aluogang 2012-11-08
  • 打赏
  • 举报
回复
Mark
threenewbee 2012-11-08
  • 打赏
  • 举报
回复
感谢分享,好帖推荐是可以获赠可用分的。不过不知道你是没有写完还是怎么回事,没理解lz想说什么。
万金流 2012-11-08
  • 打赏
  • 举报
回复
引用 2 楼 zyug 的回复:
我前几年有和你同样的想法。 后来我慢慢的改变了看法,用原生态的也不错。照着ms mvc框架的思路写代码也挺优雅的。 哈哈 不过你现在的观点我也是支持的
谢谢高人交流!你说的东西我仔细想了,主要是怕用微软的东西太局限了,不敢被他的实体框架绑死。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧