浅谈MVC框架设计

为什么要设计框架?

在开发的过程中为了方便管理资源,统一一定的规范,所以采用使用框架,为了以后项目的延伸和拓展,比如我们的代码其实都可以在一个方法内进行,而且也不需要相互调用也许会更快吧?但是要是发生错误呢 ?好不容易执行的最后一行结果突然发生错误了,很难受不是  题外话,但是也可以感受到一个好的设计会给我们带来很大的方便

题外话继续 :开发过程中,我们前后台之间相互关联,有一个项目的改动就需要一起协调,这还是一个小功能,要是同时进行一次开发,那就难免深受其累了,怎么样才能方便管理、前后台分离呢?  按照模块化儿文件夹来区分是个不错的想法,这里给大家带来一点儿自己开发的心得,当然是有很多前辈的心血  题外话结束

使用Areas、区域、模块化分离项目

首先建立一个项目Forame,添加3个类库项目Forame.BLL、Forame.Controllers、Forame.Models,一个MVC项目Forame.Web,目录如下:

在Web项目中添加MVC区域Area 右键项目  添加  区域(列表第一个)输入创建的区域名称 ,由于可以有多个区域所以统一存放在了Areas文件夹下所以大家不要感觉到奇怪,为什么多个文件夹出来  , 我们在这里创建两个区域 ,管理员Admin、用户User,

正如你所见,区域生成的目录和原本的目录结构一致,这也意味着我们初步实现了分离按照模块化分离,毕竟多数的项目版本管理工具都是在文件内管理--比如我在操作这个文件夹的时候锁住,使用完成再释放,但是这还远远不够、达不到我们预期的目标,那么我们继续,有些朋友一定记得我们创建了三个类库,可都还没有使用呢 呵呵! 下面我们就把这个联系起来

在类库Forame.Controllers中引用System.Web.Mvc程序集 创建类HomeController、,在这个我们使Forame.Controllers类库作为我们的控制器,当然控制器的规约我们还是要遵守的,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
namespace Forame.Controllers
{
    public class FirstController:Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}

FirstController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;

namespace Forame.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}

HomeController

其次我们再继续回到Web项目中,在Areas区域内的Admin、User区域中添加相应的视图  操作如:在Vires下创建和控制器对应的文件下  --  添加视图  --  视图页面上输出一些可以用来标识的文本,也许眼急的朋友已经看到了  哎,这个文件夹下怎么还有一个类,恭喜你,中奖了,由于我们设置了区域,相当于修了一些墙,那么怎么样才能把合适的用户带入合适的房间,AreaRegistration.cs这个类为我们提供了支持:这个类的作用就是设置路由,同时将URL指向控制器,这里我们一般不需要进行改动但是需要加一个属性

using System.Web.Mvc;

namespace Forame.Web.Areas.Admin
{
    public class AdminAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Admin";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_default",//路由的名称
                "Admin/{controller}/{action}/{id}",  //路由格式
                new { action = "Index", id = UrlParameter.Optional }//路由参数定义
            );
        }
    }
}

路由设置类的样子

using System.Web.Mvc;

namespace Forame.Web.Areas.Admin
{
    public class AdminAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Admin";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_default",//路由的名称
                "Admin/{controller}/{action}/{id}",  //路由格式
                new { action = "Index", id = UrlParameter.Optional },//路由参数定义
                new string[] { "Forame.Controllers" }//指向控制器所在位置
            );
        }
    }
}

修改后的样子

同时我们需要在总的路由App_Sta,rt文件夹下的RouteConfig 同样添加控制器的位置属性

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace Forame.Web
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces: new string[] { "Forame.Controllers" }//指向控制器所在位置
            );
        }
    }
}

总的路由也需要设置

好了,至此我们的分离就算完成了  等 !等等!! 同学们先别急着下课,我们是不是忘记了什么  记得Web要添加Forame.Controllers类库的引用哟,大家可以继续看看4个页面的URL的不同之处

总结:想必大家看到这里心里也有一些想法了,是的我们使用的MVC区域的知识点,主要是将控制器分离到了一个独立的类库中接触了和前端的耦合关联,当然我们可以 在类库中按照文件夹来区分各个控制器,总而言之BLL用来做业务逻辑、Model用来存放实体类、 Controllers用来和前台交互返回数据、Web用来做前端页面展示,

道歉:由于本人文笔有限,可能描述的不太清楚欢迎各位评论、留言、交流,批评、指正。

原文地址:https://www.cnblogs.com/huanjinyuan/p/8288287.html

时间: 2024-10-11 10:34:07

浅谈MVC框架设计的相关文章

2014-07-29 浅谈MVC框架中Razor与ASPX视图引擎

今天是在吾索实习的第15天.随着准备工作的完善,我们小组将逐步开始手机端BBS的开发,而且我们将计划使用MVC框架进行该系统的开发.虽然我们对MVC框架并不是非常熟悉,或许这会降低我们开发该系统的效率,但是我们可以通过边学边做的方式来实现其开发的.这不仅便于我们日后对系统的管理与维护,而且还给我们带来一个学习的动力与实践的地方. 但我们在创建一个基于MVC框架的项目时,就遇到一些问题了.那就是MVC的视图引擎是有两种的,一种是Razor,会以cshtml后缀的文件作为视图文件:另一种是ASPX,

浅谈数据库框架,见笑,请多指正

浅谈数据库框架,见笑,请多指正 http://weibo.com/p/1001603724746155003486 一友说"插件式存储又割裂了SQL引擎的完整逻辑...总体而言在现有框架下MySQL的优化器没有多大改进的价值". 我们且做个技术分析: 1 插件式框架,可以静态/动态加载组件,方便在同类不同属家的模块间切换,这种设计是良好的. 很多软件的设计都采用了"微内核+插件"这样的方式构筑了强大的应用.如Ecplise生态圈. 2 数据库范围内, MySQL的属

浅谈MVC

浅谈MVC What is MVC? MVC与模板概念的理解:MVC(Model View Controller)模型-视图-控制器 MVC本来是存在于Deskt op程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC 的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据你可以分别用柱状图.饼图来表示.C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新. 模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Small

浅谈商城活动设计

如题:浅谈商城活动设计 标题改成“浅谈商城活动的数据库设计”可能更加合理. 文章背景 为什么要吐槽,为什么要写这篇文章 本来我在弄大数据搜索,自己玩的不亦说乎,虽然感觉数据库设计不合理,但我可以数据清洗,弄到自己的搜索引擎里,自己随便玩,所以当时感觉在烂的数据库设计和我关系不大,只要我把数据清洗好,弄到自己的引擎里我的搜索正常,准确,问题不大.但忽然有一天老大跑来说ERP对接需要你来lead一下,然后一两个月带着捣乱的产品妹妹,和没有经验开发弟弟搞了ERP的简单对接,然后老大又说咱们商城库存总有

浅谈MVC、MVP、MVVM架构模式的区别和联系

浅谈MVC.MVP.MVVM架构模式的区别和联系 学习了:http://www.cnblogs.com/guwei4037/p/5591183.html http://blog.csdn.net/ttf1993/article/details/49405329 MVC: Model->View->Controller->Model MVP: View <--> Presenter <--> Model MVVM: View (ViewController)<

浅谈 MVC 和 MTV

浅谈 MVC 和 MTV 一.MVC M:model,模型,就是数据模型,负责数据的存取: V:view,视图,负责页面的展示逻辑: C:controller,控制器,负责业务逻辑的处理: 二.MTV M:model,模型,就是数据模型,负责数据的存取: T:template,模板,负责页面的展示逻辑: V:view function,视图函数,负责业务逻辑的处理: 注:核心目的就是为了解耦,提高开发效率 欢迎关注小婷儿的博客: csdn:https://blog.csdn.net/u01098

浅谈android架构设计

到目前为止,android开发在网络上或者社区上没有公认的或者统一的开发框架,好多框架都是基于对方法的封装.今天在这浅谈两年来对android开发的理解,主要是思想上的理解,希望对大家有帮助. 我认为android开发可以从两个方面去总结架构的设计,在这里对于实现只做陈述: 一,就是大多数人的设计思路,对方法的封装. 在这里我根据开发的习惯对工程进行包的设计: 1. http:网络请求方法封装.这里建议采用线程+Handler的模式,把Http 中get方法和post两种请求方式分开,对于正常的

浅谈MVC架构—你到底有什么本事

一.什么是MVC 1.概念 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 小编点睛:MVC就是类似三层的一种架构,主要还是采用封装(分层)的思想,来降低耦合

浅谈MVC中的service层(转)

概述 mvc框架由model,view,controller组成,执行流程一般是:在controller访问model获取数据,通过view渲染页面. mvc模式是web开发中的基础模式,采用的是分层设计,各层之间职责分明.然而事与愿违,当我们日积月累的基于mvc模式开发之后,会逐渐的感受到层与层之间存在粘连和职责模棱两可的地方,这就是service层出现的重要原因. 问题是什么? 问题的本质是:业务逻辑粘连了C层和M层,应该从C层&M层解耦出来,成为独立的Service层. 在C层直接实现业务