框架总分2个项目:Web开发项目、帮助类项目 (ZyCommon、Zy.Utilities)

1、ZyCommon,是Web开发项目结构。新建一个空解决方案,再建Data、Service、ZyWeb解决方案文件夹,把数据层、接口服务层、Web层区分开

1.1、Data解决方案下----Zy.Xn.Model 数据模型项目,设计好System下 组织机构、菜单、角色、角色菜单、角色用户、用户实体类,Models是系统使用的一些DTO基类,比如ztree控件需要的一些实体字段,角色菜单DTO,BaseModel是一个基类,存放一个Id自动增长的字段,供System下的多个实体引用

1.2 、Data解决方案下----Zy.Xn.Entity 实体项目,用来管理实体上下文的,添加Entity Framework的引用,添加 Zy.Xn.Model  的引用,把实体类放到上下文类中,在App.config配置好连接数据库,然后使用Code First创建表,以后每次更新数据库表字段,只需要更新Model项目中的实体类,使用Code First Migrations 命令更新即可,初始时需要 Enable-Migrations ,启用迁移后会在实体项目下生成 Migrations文件夹,存放每次迁移的记录,至此Data层的功能大致是如此的

命令:工具--NuGet包管理器--程序包管理器控制台--默认项目选择Zy.Xn.Entity 上下文项目

添加迁移报告:add-migration 20160911

更新到数据库:update-database

迁移至指定版本(包括后退):Update-Database –TargetMigration: $InitialDatabase

得到SQL脚本(部署到服务器时很有用) : Update-Database -Script -SourceMigration: 最开始版本号-TargetMigration: 结束版本号

1.3、Service解决方案下 ---- Zy.Xn.IServices 服务接口层,面向接口编程,好处多多

1.4、Service解决方案下 ---- Zy.Xn.Services 服务实现层

1.5、Web项目,新建Areas,多个项目只要在Areas下建多个项目即可,后台管理系统放在Admin文件夹下,系统所用的JS、CSS、Images等存放在Content文件夹下

2、Zy.Utilities 所有帮助类、依赖注入、基类控制器等再此项目下实现

2.1、Zy.Utility.Core项目提供所有的帮助类,如:异常类、日志类、IOHelper、ImageHelper,PageModel(列表基类) 等等系统可能用到的帮助类,日志类会专门开一篇文章讲解,如何在项目配置Log4日志,报错后怎么把错误信息写入日志

2.2、Zy.Utility.ServicesProvider项目是服务代理提供者,也就是 Autofac依赖注入的实现

2.3、Zy.Utility.WebFramework项目提供控制器基类、接口服务帮助类、Bundles帮助类(读取js、css配置节点)

2.3.1、控制器基类,重写异常捕获方法并把错误信息写入日志,获取当前登录用户,Session失效后重定向的控制器等功能,给Web项目使用

2.3.2、bundles在web项目中的实现,新建一个admin.bundles文件,使用它的好处是可以压缩js、css,减少网络流量,当然,也可以在项目中App_Start--BundleConfig中配置,不过没有自定义实现方便

从零开始写C# MVC框架之--- 项目结构的更多相关文章

  1. 从零开始写C# MVC框架之--- 配置log4日志

    在框架中配置日志分2步,一个是在帮助项目Zy.Utilities--Zy.Utility.Core中新建log类,封装写入日志方法,还需要在Zy.Utility.Core添加 log4net 的引用 ...

  2. 读《架构探险——从零开始写Java Web框架》

    内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...

  3. 手写Spring MVC框架(一) 实现简易版mvc框架

    前言 前面几篇文章中,我们讲解了Spring MVC执⾏的⼤致原理及关键组件的源码解析,今天,我们来模仿它⼿写⾃⼰的mvc框架. 先梳理一下需要实现的功能点: tomcat加载配置文件web.xml: ...

  4. 自己动手写PHP MVC框架

    自己动手写PHP MVC框架 来自:yuansir-web.com / yuansir@live.cn 代码下载: https://github.com/yuansir/tiny-php-framew ...

  5. 【EatBook】-NO.3.EatBook.3.JavaArchitecture.2.001-《架构探险:从零开始写Java Web框架》-

    1.0.0 Summary Tittle:[EatBook]-NO.3.EatBook.3.JavaArchitecture.2.001-<架构探险:从零开始写Java Web框架>- S ...

  6. 学习如何写PHP MVC框架(1) -- 路由

    说到PHP开发web,自然离不开开发框架,开发框架为我们提供了灵活的开发方式,MVC层分离,业务解耦等... 第一篇先来简单点的,说说MVC框架的路由功能... 一般的单入口框架路由都是这样的结构: ...

  7. 手写Spring MVC框架(二) 实现访问拦截功能

    前言 在上一篇文章中,我们手写了一个简单的mvc框架,今天我们要实现的功能点是:在Spring MVC框架基础上实现访问拦截功能. 先梳理一下需要实现的功能点: 搭建好Spring MVC基本框架: ...

  8. [转].net mvc + vuejs 的项目结构

    .net项目结构: 程序目录结构: vue操作: 前提:安装npm ,vue,vue-cli 1.进入控制台窗口 2.进入程序目录 3.运行 vue init webpack webjs 生成webj ...

  9. 写出Zend 框架的目录结构,简单说明目录作用?

    application/ – 存放应用程序的目录,包括MVC 系统.配置文件.服务以及引导程序(Bootstrap.php)configs/ –配置文件目录.application/modules – ...

随机推荐

  1. 十五、Node.js-fs模块(中)

    有了上一篇JS同步异步知识的铺垫,我们一起学习一下fs模块的同步和异步知识: Node.js内置的fs模块就是文件系统模块,负责读写文件. 和所有其它JavaScript模块不同的是,fs模块同时提供 ...

  2. 编码原则实例------c++程序设计原理与实践(进阶篇)

    编码原则: 一般原则 预处理原则 命名和布局原则 类原则 函数和表达式原则 硬实时原则 关键系统原则 (硬实时原则.关键系统原则仅用于硬实时和关键系统程序设计) (严格原则都用一个大写字母R及其编号标 ...

  3. Logic Controller(逻辑控制器)

    逻辑控制器主要用来控制采样器的执行顺序,仅对其子节点的逻辑控制器和采样器其作用. 1.Simple Controller(简单控制器) 简单控制器主要用来组织其他逻辑控制器和采样器,提供了一个块的结构 ...

  4. kali linux之被动信息收集(dns信息收集,区域传输,字典爆破)

    公开可获取的信息,不与目标系统产生交互,避免留下痕迹 下图来自美军方 pdf链接:http://www.fas.org/irp/doddir/army/atp2-22-9.pdf 信息收集内容(可利用 ...

  5. IIS发布ASP程序问题汇总

    看异常位置,因为域的问题

  6. P1129 [ZJOI2007]矩阵游戏(二分图,网络流)

    传送门 这推导过程真的有点可怕的说……完全想不出来…… 最终状态是$(1,1),(2,2),(3,3)...(n,n)$都有一个黑点 我们可以理解为每一个行和列都形成了一个匹配 换句话说,只要$n$行 ...

  7. HDU6318-2018ACM暑假多校联合训练2-1010-Swaps and Inversions-树状数组

    本题题意是,给你一个长度为n的序列,使用最少的操作把序列转换为从小到大的顺序,并输出操作数*min(x,y) 实质上是算出该序列中有多少逆序对,有归并排序和树状数组两种算法,由于数据之间的差值有点大, ...

  8. [Swift]八大排序算法(三):选择排序 和 简单选择排序

    排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...

  9. JS 只创建一个元素

    //判断有没有这个元素<div id="div"> if(my$("div").firstElementChild){ console.log(&q ...

  10. JS 函数的基本练习

    // - 求3个数中的最大值 function biJiao3(x, y, z) { return x > y ? (x > z ? x : z) : (y > z ? y : z) ...