好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

通过一个简单的文章系统学习MVC3+Linq搭建网站项目文件结构介绍(3)

通过一个简单的文章系统学习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.Title

复制代码

ViewData["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.cs

View 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)的详细内容...

  阅读:43次