框架总分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. 【bzoj1009】: [HNOI2008]GT考试 字符串-kmp-矩阵乘法-DP

    [bzoj1009]: [HNOI2008]GT考试 先用kmp写个暴力 /* http://www.cnblogs.com/karl07/ */ #include <cstdlib> # ...

  2. 伪元素改变date类型input框的默认样式实例页面

    CSS代码: ::-webkit-datetime-edit { padding: 1px; background: url(/study/image/selection.gif); } ::-web ...

  3. 利用PHP 简单实现加减法验证码

    <?php header('Content-Type: image/png'); $im = imagecreatetruecolor( 200 , 50 );//生成图片长宽 // Creat ...

  4. js 三大家族之offset

    JS中的offset家族: 一.offsetWidth与offsetHeight: 获取的是元素的实际宽高 = width + border + padding 注意点: 1.可以获取行内及内嵌的宽高 ...

  5. python期中总结

    1.tuple 元组 与列表类似 tup1 = (12, 34.56) tup2 = ('abc', 'xyz') # 以下修改元组元素操作是非法的. # tup1[0] = 100 # 创建一个新的 ...

  6. 老男孩python作业6-选课系统开发

    角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. 课程包含,周期,价格 ...

  7. Linux之旅(二)

    上一章讲到,mysql 安装遇到问题 ...莫名其妙好了,此处已回想不起为什么好了,只得跳过. 六.安装php7 参考教程[ http://www.thinkphp.cn/topic/48196.ht ...

  8. abp学习资料

    参考: https://www.jianshu.com/p/a6e9ace79345

  9. bzoj 1005: [HNOI2008]明明的烦恼 树的prufer序列+万进制

    题目传送门 思路: 这道题需要前置知识prufer编码,这篇博客对prufer编码和这道题的分析写的很好. 这里主要讲一些对大数阶乘的分解,一个办法当然是用高精度,上面这篇博客用的是java,还有一个 ...

  10. stopPropagation / stopImmediatePropagation

      stopPropagation()只会阻止冒泡或者是捕获. stopImmediatePropagation()会阻止该元素的其他事件发生,但是stopPropagation就不会阻止其他事件的发 ...