MVC学习笔记

 IT职场新人一枚,入职头两天研发部的BOSS就交代了安装环境和需要自学的内容,给我的感觉就是在学校里学的是数学(工具),但是到公司里做项目则更像让你解物理题,你得学全新的公式(框架),起初着实让我头疼...不过既然选择了这行心里就有了准备,新的知识新的挑战什么的,尽管来就是了;努力抗住最难熬的这段时间,养成好的学习习惯,才是最重要的~~~
    自学了几天MVC了,按着事例照着敲了一遍在MVC框架下增删改查的DEMO,这里整理下笔记,与大家分享下,同时也希望有大神能指点一二,特别是MODEL,CODE First 下的实体类和XML文件及Config文件的配置问题。
    以下的例子是建立.edmx文件,用的是DBFirst连接的数据库,把种种我弄不清的问题都先交给VS自己解决了,先上手能敲出点东西为先,可能会马上参加进项目组写东西~~
  
  原理笔记:(转自邹老师的公开课笔记)
1.MVC设计模式
Model 是指 要处理的业务代码和数据操作代码
View 视图 主要是指的 跟用户打交道 并能够展示数据
Controller 看成是 Model和View的桥梁
 
优点:
1.1.可以降低 Model(业务/数据) 和 视图(视图) 的耦合关系
1.2.可以复用视图(同样的数据,可以使用不同的视图以 不同的图标展示出来!)
 
2.DotNetMVC 框架:约定大于配置
 
2.1控制器类命名 以 Contoller结尾:HomeController
2.2控制器类将会产生一个 与之同名的 在Views文件夹下的 文件夹:~/View/Home
2.3控制器里的 Action方法,也可在视图文件夹下生成一个同名的视图,如:Index.cshtml
 
3.EF(EntityFrameWork)
ORM(对象关系映射框架/ 数据持久化框架)
根据 实体对象 操作  数据表中数据的一种面向对象的操作框架。
底层也是调用 Ado.Net
 
 
    首先,强调一点MVC中的MODEL区别于3层架构中的业务实体层,MVC中的Model 是指 要处理的业务代码和数据操作代码,直白的说代码写在Control里。
 
    先连接数据库好了,做增删改查离不开数据库。
    
    1.新建一个项目,WEB里选择MVC4.0应用程序。
    2.在自动生成的MODEL文件夹下添加一个数据下的ADO.NET实体数据模型。
        
    3.选择从数据库生成(数据库生成为DBFirst,空模型则为MODEL/CODE First)不管用这样的生成了先。
        
    4.选择数据库,这里最爽的就是实体连接字符串自动生成(自己写要头不知道怎么写....)
        
    (完成之后可以在中自动生成连接字符串这里可以先看看)
        *要注意的是这里的name必须与数据库的名字一致
            
        尝试着自己写过连接SQL的字符串,基于CODEFirst的编码,不清楚是XML文件还是Config文件出了错,不能对数据库进行操作....
        对了,还有就是我的教训:在DBFirst和Code/ModelFirst两种之间只能选择一种,否则会产生冲突,导致结果出不来。
        
    5.选择要对数据库操作的表,勾选单复数形式,完成,就OK了。
        
 
至此,连接数据库的问题解决了,就等于是解决了问题的大头了....(这里希望有大神能教一下Code/ModelFirst 模式下的代码编写 就是实体类的映射文件都自己配的写法 能举个例子就好~让我知道代码该写哪 该注意什么)
 
    然后就是开始代码部分了:
 
    1.新建一个空的控制器HomeController,控制器的命名规范是约定好的 Controller部分是无法被修改的(这里有个约定大于配置的原则)
    2. 控制器中有很多Action方法 默认生成的是Index方法,而每个Index方法下都可以选择生成一个View(视图)
        业务逻辑写在控制器里,视图呢只负责与客户交互,通过URL可直接访问指定的视图,为了区分开我写了两个ACTION方法
        
         
            index 和 index2 并为两个方法生成了两个不同的视图
            (*这里约定大于配置的原则又得到体现了,创建的HomeController控制器,的同时默认的在views文件夹下生成了一个home文件夹,当中存放的视图,是匹配homeController控制器中的各个Action方法的 这里一目了然~~~)
            
            想要直接访问两个view 可以直接通过修改url来访问
            试试看http://localhost:1839/index2 这个地址就指代不明确导致访问不了页面的,或者说根本就没这么个路劲的视图存在
            localhost:XXXX/这段自动生成我们不管,看看后面 home控制器下的index方法中生成的同名视图
            这里就可以理解,控制器是数据和视图之间交互的桥梁这句话了~
            控制器中的方法就是数据处理和业务逻辑,而该方法中如有生成的视图,则这个方法会调用生成了的该视图
 
这里增删改查的DEMO 只在弄清,业务逻辑代码写在哪,大概要注意哪些编码规范;至于在项目中要怎么去写(啊~~~目前正着手的项目,框架已经搭好了,我只是对某个页面的业务逻辑和表现做修改,业务逻辑怎么处理啊....改掉了很多字段新增了很多字段,怎么用啊~~~怎么用啊~~~诶 还是没什么头绪啊....纠结啊.... 好了 吐槽完了 接着做正事)
        //这里查询修改的都是在home页面下完成的,只需要在index方法下生成视图,至于修改,删除什么的,只需要知道执行成功没有,然后再更新视图,所以这里只需要在index下生成视图就O了;
        //这里的数据都是通过引用下面两个命名空间中的entity 即EF来存放和传递的(公司的代码用的是NHibernate框架的所以代码实现多少有些不一样....这里也是最让我头疼的,下一阶段就是学NHibernate框架了 =-=  没办法 职场新人最开始的几个月总是很难熬的,咬着牙坚持吧,也希望期间能练成一套自己的学习方法 受用终身啊~有木有~)
        //using System.Data.Entity;
        //using System.Data.Entity.Infrastructure;
        //using MVCBlog.Models;--以下引用的实体类,这个命名空间很有必要的;
        public ActionResult Index()
        {
            //Model 是指 要处理的业务代码和数据操作代码,区别于3层中的Model层是对象实体层;
            //查询数据库中的文章数据(通过EF执行)
            //使用sqo标准查询运算符
            //IQueryable<Models.BlogArticle> query = (IQueryable<Models.BlogArticle>)db.BlogArticle.Where(d => d.AIsDel == false) as IQueryable<Models.BlogArticle>;
            //List<Models.BlogArticle> list = db.BlogArticle.Where(d => d.AIsDel == false).ToList();
            
            //使用linq语句查询,并将查询的结果存放到list中
            List<Models.BlogArticle> list = (from d in db.BlogArticle where d.AIsDel == false select d).ToList();
            
            //将集合数据传送给视图,数据传递有两种方式
            // a. viewbag传递
            // b. viewdata传递
            ViewData["DataList"] = list;
 
            //加载视图
            return View();
        }
        //既然加载视图了 就进视图看看 里面写了啥
//引用命名空间,看出来神马木有,在视图上@后面的代码,你可以按照后台代码的编写规范来,比起繁琐的标记语言爽多了啊~
@using MVCBlog.Models
 
//都没有用到viewbag这句其实可以干掉,是生成视图时自动生成的代码;
@{
    ViewBag.Title = "Index";
}
 
可以把视图当成3层里面的UI层,只是代码编写上更方便,同时也更有技巧,慢慢练吧~
<html>
</head>
    <body>
        <table id="tbList">
            <tr>  
                <th>id</th>
                <th>标题</th>
                <th>分类</th>
                <th>状态</th>
                <th>时间</th>
                <th colspan="2">操作</th>
            </tr>
        
        <!-- 遍历集合数据 生成html代码-->
        @foreach (BlogArticle a in ViewData["DataList"] as List<BlogArticle>)
        { 
            <tr>
                <td>@a.AId</td>
                <td>@a.ATitle</td>
                <td>@a.BlogArticleCate.Name</td>
                <td>@a.Enumeration.e_cname</td>
                <td>@a.AAddtime</td>
                <td><a href="javascript:del(@a.AId)">删除</a></td>
                <td><a href="/home/modify/@a.AId">修改</a></td>
            </tr>    
        }
        </table>
    </body>
</html>
 
OK 现在主页加载的时候就会自动加载数据库中的数据啦~
增删改的大体思路一致,就偷个懒啦~嘻嘻
关于学习资料的分享:
1.codeplex中的musicstore的源代码照着敲一遍,这个是modelfirst,可能写起来有些麻烦
2.还有就是传智播客的MVC公开课,邹华栋老师很激情啊~赞一个,地址:额.... 忘了 大家搜一下就好啦~
 
总结下:
大体的思路,在控制器中写方法,要查询,增加,删除,更新?whatever 一个ACTION里面写一个功能 然后又必要就生成视图咯
然后CONTROLLER中的ACTION方法,无非就是和过去3层里面的代码大同小异,只是有写语法,比如LINQ语句和EF框架下的数据处理的机制
都要学习,视图就是HTML代码写法咯,
讲的很宽泛也很浅,只是整理了MVC下分析代码和编写代码的思路,至于具体实现,今后还有很长的路要走啊~
所以各位新人(包括我)慢慢努力啦~
posted @ 2013-03-19 23:07  xcycanits  阅读(259)  评论(0)    收藏  举报