基于Autofac框架+EF框架的MVC模式.Net项目总结。(架构、流程、技术栈)Part1:项目架构

开发前进行项目架构的确定和数据库的设计

1.概要剖析
首先先对需求说明进行一个概要剖析吧,我选择从具体的业务作为切入点,以下附上具体的业务需求。本次项目的业务需求难度并不是很难,但是涵盖的业务技巧,业务完整,规范,严谨,可扩展等等知识,我觉得对以后的工作业务发展帮助很大。
2.首先是对前台用户的功能模块划分
在这里插入图片描述
3.后台管理模块的划分
在这里插入图片描述
4.架构原因
因为是业务较为清晰,并且项目规模不大,本次采用的架构并非传统三层架构,经过考虑还是采用UI+Service架构进行开发,并非说是三层架构不好,而是项目业务需求并不用用到三层架构的复杂程度,没有正确的架构,只有合适的架构,适合项目需求的架构才是好的架构。
5.数据库表设置。
设置软删除设置IsDeleted 字段,主键设置采用自增字段,在实体类里面long类型,创建时间也是必须CreateDateTime 字段, DateTime类型,注意在表设置的时候要考虑哪些字段是可空类型,设置数据字典表,有些业务需要用到性别、民族等等选项框之类的(很多时候也叫维度表)
6.系统配置表
在项目里面会遇到很多比如一些系统配置,插件框架配置,比如使用邮箱的短信的 smtp 码 服务器的账号的授权码,类似与这些账号密码的字段,都是动态添加在数据库表里面的,并不是在程序代码里面写死的,这样不利于项目的扩展性和复用性
7.日志组件
项目采用Log4NET框架进行管理,常见的日志级别:trace、debug、info、warn、error、fatal等等。组件需要在Nuget安装之后,在配置文件里面如果没有自动配置,需要自己修改下App.Config,还要需要在Global全局文件里面加入log4net.Config.XmlConfigurator.Configure();语句,否则即使配好文件,你也无法找到文件的输出(这个我曾经踩过坑),具体的配置,完整的流程可以自行找教程。
还有就是一个容易出错的地方:记 录 息 信 息 : : ILog logger = LogManager.GetLogger(typeof(WebForm1));注 意 不 是LoggerManager 、不是 ILogger,而是ILog。
8.EF框架框架搭建
采用CodeFirst的方式自动生成数据库,注意要涉及到上面提到的数据库的几个字段,建立一个公共抽象实体类吧,让所有的实体类都继承于它,搭建的详细过程可以自行上网查看,也可以参考我曾经写过的博客
搭建过程
搭建完成以后要写一些通用方法,比如隔离软删除数据,通过Id获取具体的某条数据等等方法吧,这样便于系统的架构清晰,维护起来方便一点
9.Autofac框架搭建
Autofac其实是一个IOC容器,使用 IOC 容器的时候,一般都是建议基于接口编程,也就是把方法定义到接口中,然后再编写实现类。 在使用的时候声明接口类型的变量、属性,由容器负责赋值。 接口、实现类一般都是定义在单独的项目中,这样减少互相的耦合。
MVC 下的配置:
1 ) 安装 MVC 的 的 AutoFac 插件:Install-Package Autofac.Mvc5 较慢
2 ) 在 在 Global 中调用:

var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly).PropertiesAutowired();// 把当前
的 程序集中的 Controller  都注册
// 不要忘了.PropertiesAutowired()
//  获取所有相关类库的程序集
Assembly[] assemblies = new Assembly[] { Assembly.Load("ZSZ.Service") };
builder.RegisterAssemblyTypes(assemblies)
.Where(type => !type.IsAbstract)
.AsImplementedInterfaces().PropertiesAutowired();
var container = builder.Build();
// 注册系统级别的 DependencyResolver ,这样当 MVC  框架创建 Controller  等对象的时候都
//管 是管 Autofac  要对象。
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));//!!!

可选代码:

builder.RegisterFilterProvider();
//为 为 ActionFilter  注入
builder.RegisterAssemblyTypes(typeof(MvcApplication).Assembly)
.Where(type => typeof(ActionFilterAttribute).IsAssignableFrom(type) && !type.IsAbstract)
.PropertiesAutowired();

3 ) 如果想为自定义 ModelBinder 等注入,还可以使用
builder.RegisterModelBinders()等方法
4) 这样在 Controller 中只要声明 Service 的属性即可,AutoFac 会自动完成属性注入。
5)在控制器里面直接声明一个接口类属性,可以直接调用接口方法
在这里插入图片描述
6)详细的过程可以自行上网查找
10.封装Json.Net
这个是为了避免 MVC 默认使用 JavaScriptSerializer做 json 序列化,,不好用(DateTime日期的格式化、循环引用、属性名开头小写等而),这里采用AOP的思想,Global 中加一句:GlobalFilters.Filters.Add(new JsonNetActionFilter ());具体过程自行上网查找!
11.封装Ajax返回结果类
因为控制器和视图进行交互的时候,在前端使用ajax方法需要知道ajax调用控制器,是否成功?所以 ajax 请求返回的内容都包含“处理结果、数据、消息”,为了统一 ajax 的响应,我们定义一个包含 Status、Data、Msg 三个属性的类 AjaxResult,并且提供方便使用的几个构造函数。示例如下:

<script type="text/javascript">
    $(function () {
        $("#btnLogin").click(function () {
            var phoneNum = $("#phoneNum").val();
            var password = $("#password").val();
            $.ajax({
                url: "/Main/Login", type: "post", dataType: "json",
                data:{phoneNum:phoneNum,password:password},
                success:function(res)
                {
                    if(res.status=="ok")
                    {
                        location.href = "/Main/Index";
                    }
                    else
                    {
                        alert(res.errorMsg);
                    }
                },
                error:function()
                {
                    alert("网络错误");
                }
            });
        });
    });
</script>

12.关于套UI模板
找好一套前端模板,采用套模板的方式开发,做好的UI界面,自己稍微修改下就可以使用啦,个人推荐采用MUI 、HUI等等的现成模板,比如一些符合后台管理系统的模板,举个例子,随便上网都能找到类似如下的脚本模板在这里插入图片描述
13.进程外Session
配置前后台项目采用进程外Session ) (用数据库) SessionId 是保存在Cookie 中的,其 Expires (过期时间)为“空”,也就是浏览器关闭之后 SessionId 消失,这时候对应的 服务器端的 Session 信息其实还会存在一段时间,直到过期,但是由于浏览器的 SessionId的 已经消失了,所以浏览器端重启之后也找不到之前的Session 了,而是一个新的Session。 外 进程外 Session 解决的不是浏览器关闭之后取不到之前 Session 数据的问题,而是 web服务器重启之后端 服务器端 Session 数据 丢失的 问题 。外 测试进程外 sessioin 一定注意浏览器不能关。
配置过程CMD一顿操作巴拉巴拉,这里不详细介绍,网上一堆资源,自行查看,这里提醒的意思是想大家在做项目的时候一定要注意这些点,不要把session放在进程中!
14.封装一些常用底层库
比如全角转半角,MD5密码,分页等等,都把他们封装在类库项目里面,方便调用,一次封装,多次使用,(一劳永逸哈哈),其他课设项目都可以用噢!😜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值