通过一个简单的文章系统学习MVC3+Linq搭建网站项目文件结构介绍(3)
通过一个简单的文章系统学习MVC3+Linq搭建网站:
(1)数据库建模 (2012-03-23 12:10)
(2)如何利用系统自带的用户系统 (2012-03-28 22:41)
(3) 项目文件结构介绍 (2012-04-04 15:41)
源码 数据库创建sql 本示例DEMO
下图是我们的项目资源文件,我大概标注了它们各自的角色作用。
下面我分别对他们进行一些简单的说明:
2,5,:存放一些网站资源文件,js等。
1,一些常用工具类,比如json处理,分页类等。
7, Global.asax MVC中以前那套基于文件目录的URL没有了,MVC中的url则是基于我们的控制器Controller,以及控制器里的Action方法以及参数。我们把这套模式叫做路由,那么,有关路由的配置以及更复杂的定义都将会在Global.asax中来实现。Global.asax中默认的路由设置
routes.MapRoute(
" Default " , // 路由名称
" {controller}/{action}/{id} " , // 带有参数的 URL
new { controller = " Home " , action = " Index " , id = UrlParameter.Optional } // 参数默认值
);新添加一个路由设置
// 定义分页页面路由
routes.MapRoute(
" CategoryPager " ,
" {controller}/{cid}_{pageNo} " ,
new { controller = " Home " , action = " Category " },
new { cid = " [0-9]+ " , pageNo = " [0-9]+ " }
);
8. web.config .网站配置文件,首先清楚我们的数据库连接在这里就行了。我们新建了一个数据实体映射,会在这里自动添加对应的数据库连接字段。如果我们是从模板新建的项目,自带了系统生成的用户权限程序,对应的数据库连接字段也在这里,系统在App_Data下自动创建了一个数据库文件, 详见==》。 如果我们需要修改它们,就在这里完成。接下来说说MVC部分,看看各部分之间是如何建立联系的。
Controllers跟Views
Controllers跟Views的部分很好理解,因为它们对应得实在太整齐了,MVC中的Views模板的做法其实跟我们asp时期的模板处理方法很相似,asp时期,我们会写一些html模板页,然后定义一些模板标签,对应程序中的方法,执行的时候替换后输出。比较明显的区别是,asp的程序中我们需要指定该页面使用哪个模板,MVC中我们不需要这样的操作,因为框架已经约定了前面提到的“太整齐的”的一一对应关系。所以Controller跟Views之间会自动予以匹配。
HomeController.cs
public class HomeController : Controller
{
/// <summary>
/// 首页
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
// your code
return View();
}
}return View();即表示返回对应名称的视图页面,如果我们希望返回其它视图页面,可以通过其重载方法实现 return View("视图名");
Controllers跟Views之间的数据传递 ,可以通过下面3种方式实现:
ViewBag.xxx;
// 控制器中
ViewBag.Title = " xxxxxxx " ;
// 视图中
@ViewBag.TitleViewData["xxx"]
// 控制器中
ViewData[ " Categories " ] = cmsService.GetCategories();
// 视图中
<ul>
@foreach ( var item in ViewData[ " Categories " ] as IEnumerable<YQCMS.Models.varticle>)
{
<li>@item.title</li>
}
</ul>
return View(model);
// 控制器中
varticle article = new varticle();
article = cmsService.GetArticleByID(id);
ViewBag.Title = article.title;
return View(article);
// 视图中
@model YQCMS.Models.varticle
<div class = " left " ></div>
<div class = " right " >
<div class = " article " >
<p class = " title " ><b>@Model.title</b></p>
<p class = " time " >@Model.createdate</p>
<p class = " summary " ><span style= " font-style:italic; " >@Html.Raw(Model.summary)</span></p>
</div>
</div>
上面的例子中传递过来的都是object对象,如果我们需要把它作为具体的某个实体对象来使用,还需要对应的类型转换 eg:@foreach (var item in ViewData["Categories"] as IEnumerable<YQCMS.Models.varticle>)。也就意味着我们的Views层是需要跟Models层有联系的。
ps.这也使MVC模式跟MVVM的差异所在,MVVM的VM实现了M跟V的完全隔离,但MVC没有,一开始我总觉的这两个就是一回事。Models层:
Entity Framework是MVC里一个新的概念,简称EF。它把数据库对象映射到项目中,结合LINQ,我们的数据操作只需要基于我们的EF对象,而不再基于ADO.NET通过SQL语句操作数据库。Models文件夹上右键,添加--新建项--数据--ADO.NET实体数据模型。然后挑选你需要映射的表,视图以及储存过程。
现在,我们的项目里Models层现在有3部分文件,
1,我们的数据实体映射文件xxx.edmx.
2.实体对象,如AccountModels.cs等。
3.一个Services文件夹,这是我们后来创建的。这里主要实现了数据访问相关的逻辑。
MVC中的Models层有点类似于传统三层里的数据对象层Model跟数据访问层DAL的结合体。我们后来新建了Services文件夹,将会处理类似DAL层的工作。
Services文件夹的结构:
IServices 定义了所有的数据操作方法接口。ServiceImpl文件夹下的ArticleServiceImpl.cs,CategoryServiceImpl.cs继承IServices接口并实现其方法。ArticleServiceImpl.cs,CategoryServiceImpl.cs是同一个部分类ServiceImpl的不同命名而已。这样处理是为了文件结构层次更加清晰。IServices.cs
View Code
ArticleServiceImpl.cs
View Code
CategoryServiceImpl.csView Code
CmsEntities entity = new CmsEntities();创建我们的数据模型实例,从而进行数据的操作。因为ArticleServiceImpl.cs,CategoryServiceImpl.cs只是同一个类的不同命名文件,所以我们只需要在其中任意一个文件下创建CmsEntities实例对象即可。
Models跟Controllers的联系:
/// <summary>
/// 新建一个IServices接口对象,重载Initialize方法时创建一个ServiceImpl类(实现了IServices接口)的实例,
/// 来实现Controllers跟Models之间交互,这里体现了面向接口编程的概念。
/// </summary>
public IServices cmsService { get ; set ; }
protected override void Initialize(RequestContext requestContext)
{
if (cmsService == null ) { cmsService = new ServiceImpl(); }
base .Initialize(requestContext);
}
action中的调用
varticle article = new varticle();
article = cmsService.GetArticleByID(id);
ViewData[ " Categories " ] = cmsService.GetCategories();
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于通过一个简单的文章系统学习MVC3+Linq搭建网站项目文件结构介绍(3)的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did49530