之前做项目的时候用过三层架构,是一种分层式的软件体系架构。在这个新的项目中,我第一次接触到了MVC也用到了分层的思想,巧的很也是三层的结构,但是二者还是有很大的出处的。
都是三层,前者是View,Controller,Model,后者是UI,BLL,DAL。三层目的在于解耦和,是一个系统整体的解耦,但是MVC侧重的是web系统的解耦,之前大家都接触过ASP.NET开发吧,里面有个ASPX前台用HTML来写的,后台是C#.cs也就是说是一个类。现在有了MVC,说它是一种框架是不准确的,更准确的身份是一种设计模式。
传统页面请求是根据请求的报文,会创建一个对应的页面类对象,在服务器端是不存在这个aspx页面的。类里面会执行load的代码,会输出我们请求的页面中的内容,通过IIS传回到浏览器,返回的是html+js+css。再来看MVC的请求过程,区别于传统的webform处理方式,它发送了一个index而不是index.aspx。之后根据路由配置来解析URL,并创建对象,调用index的方法。一般会通过view()方法来返回一个视图。
从字面意思来看,get是向服务器的请求来获取数据。Post是向服务器传递数据。根据二者的区别,我认为get方法更适合查询,而post方法更适合添加,修改或删除。
之前我们都是用SQL语句直接对数据库进行操作,而这个EF实体框架实现了完全不需要对数据库直接操作,而是对实体操作。每个通过EF数据上下文操作的实体对象,都保存到上下文的容器中,一旦使用了某个方法,这个时候就会给这个数据加上一个标签,当我们使用savechanges方法的时候,上下文就会遍历容器中的所有实体对象,根据实体身上的标签来进行sql操作。
什么时候使用EF:
• All -in-1框架的类映射表,需要编写映射代码, 并且是很难维护的。
• 易于理解的代码,无需创造大的数据访问层。
• 提供LINQ查询数据库。
什么的情况下,不建议使用EF:
• 实时的应用程序。
• 通过存储过程访问。
• 频繁插入操作(Insert)
• 频繁更新操作,更新的目标主要是当多行(用一个单值)
• 高性能的复杂查询,对性能有特别的要求。
在MVC模式的View中,我们可以直接通过这个工具类(HtmlHelper)来读取数据实体值,给Html标签赋值。在上面的代码中就用到了Htmlhelper来绑定数据到控件上面:
Modify.cshtml:
@using (Html.BeginForm("Modify", "Home", FormMethod.Post))
{
修改 @Html.HiddenFor(a=>a.AId)
标题:
@*@Html.TextBox("txtName",(object)Model.ATitle) *@
@Html.TextBoxFor(a=>a.ATitle)
分类:
@Html.DropDownListFor(a=>a.ACate,ViewBag.CateList as IEnumerable)
内容:
@*@Html.TextBox("txtName",(object)Model.ATitle) *@
@Html.TextAreaFor(a=>a.AContent,10,60,null)
@Html.ActionLink("返回","Index","Home")
}
HomeController:
[HttpPost]
#region 0.5执行修改 +ActionResult Modify(BlogArticle model)
///
/// 0.5执行修改
///
///
///
public ActionResult Modify(BlogArticle model)
{
try
{
//1.将实体对象加入EF对象容器中,并获取伪包装类对象
DbEntityEntry entry = db.Entry(model);
//2.将包装类对象的状态设置为unchanged
entry.State = System.Data.EntityState.Unchanged;
//3.设置 被改变的属性
entry.Property(a => a.ATitle).IsModified = true;
entry.Property(a => a.AContent).IsModified = true;
entry.Property(a => a.ACate).IsModified = true;
//4.提交到数据库
db.SaveChanges();
//5.更新成功,则命令浏览器重定向到Home/List 方法
return RedirectToAction("Index", "Home");
}
catch (Exception ex)
{
return Content("删除失败------" + ex.Message);
}
}
#endregion
}
6.1 如果开发任务紧张,看着别人的代码,写自己的线,是效率最高的学习方法
6.2 实践过后不要忘记补自己的理论
6.3 如果是自己一个人开发一个模块,也要去跟别人一起讨论框架的使用