昨天听完永康对EASYUI的介绍后终于明白了优秀的UI框架就是第一生产力,过去自己一直沉浸在后端代码中,完全忽视了前端的生产力交互,总觉得界面漂亮就是生产力,其实大错特错,真正的具有高效生产力的界面其实是像EASYUI那样不是很漂亮但是各种下拉表格,一个屏幕多级的操作才是高效的生产。高效的生产是对用户的环境有要求,并非像网页那样中看不中用。人类有着悠久的略比淘汰良币的历史,大部分的人都不愿学习新东西,习惯按照习惯的操作来生活,所以对于什么是好的真的没有一个真理。用户习惯的,高效的就是好的。可以快速响应实现客户的各种需求的就是优秀的,对于客户来讲,最少的步骤,最简单的界面和完整的操作功能就是生产力。其他的即便再漂亮,如果满足不了用户生产力的需要,管理软件也是没有用的。

今天着手搭建一套自己公司将来使用的框架。

该框架的特点:

开源:该框架大量使用开源的组件来构建,本身也完全开源;

先进:使用ASP.NET MVC及相关的组件最新版本,最新特性;

 

该框架的要求是:

组件式:基于Autofac的Ioc,开发人员根据需求组合各种组件进行项目开发;

安全:用户、角色、功能、验证、授权模块,实现原子级别操作的安全性;

UI:系统需要自带EASYUI支持后台快速开发,Bootstrap支持响应式,knockout 实现MVVM

日志:基于NLog和日志管理模块,声明式记录每个操作的成功或失败,后台进行业务日志审计和系统日志查看。

数据层:基于Entity Framework Code First实现ORM,快速实现增删改查等操作。

业务层:使用先进的DDD领域驱动开发建立领域模型,使用充血模型,有效地组织和重用业务逻辑

 

框架层次:

IE、Chrome、微信、QQ(最高层的用户界面)

EasyUI,Bootstrap,knockout

Seeing Web(基于ASP.NET MVC的框架)

Seeing Domain

Seeing Repositories

Seeing Data

Entity Framework

Seeing Core

Nlog,Autofac(最底层的支撑)

 

开始搭建

首先创建一个空白的工程Seeing.Framework

接下来添加一个基于.net framework 4.5.1版本的C#类库 Seeing.Core

打开nuget,连续安装nlog和autofac和autofac.configuration

接下来添加一个基于MVC5的ASP.NET MVC工程。

打开nuget,连续安装nlog和nlog.config,autofac和autofac.configuration。

安装完成后配置nlog将日志输出到${basedir}/logs/${shortdate}.log输出文件

配置完成后增加autofac的配置,我使用json方式来配置。配置的时候才发现其实自己并不熟悉autofac,于是花了一天时间把autofac官网文档读了一遍。写了几个测试的demo后渐渐的熟悉了起来。

接下来在Seeing.Core工程中注入HttpModule,根据经验我创建了一个IAppHttpModule,然后继承IHttpModule实现了一个加载器,该加载器会在系统每次请求的时候加载所有通过autofac注入的模块。

今天就实现了这些。

搭建web框架手册(一)的更多相关文章

  1. 一次框架性能的比较,引起了我对搭建web框架的兴趣

    背景 一次无意的访问,点击到了一个专门做PHP性能测试的网站,看这里PHP Benchmarks. 在里面发现了框架性能测试的结果,发现Laravel的框架性能尽然是最低的.瞬间受到了一万点的暴击,谁 ...

  2. 用Python手把手教你搭建一个web框架-flask微框架!

    在之前的文章当中,小编已经教过大家怎么搭建一个Django框架,今天我们来探索另外的一种框架的搭建,这个框架就是web框架-flask微框架啦!首先我们带着以下的几个问题来阅读本文: 1.flask是 ...

  3. python笔记-19 javascript补充、web框架、django基础

    一.JavaScript的补充 1 正则表达式 1.1 test的使用 test 测试是否符合条件 返回true or false 1.2 exec的使用 exec 从字符串中截取匹配的字符 1.3 ...

  4. 【原】Go语言及Web框架Beego环境无脑搭建

    本文涉及软件均以截至到2013年10月12日的最新版本为准 1. 相关软件准备: 1) go1.2rc1.windows-386.msi,对应32位windows系统安装使用 下载地址: https: ...

  5. 第三篇 基于.net搭建热插拔式web框架(重造Controller)

    由于.net MVC 的controller 依赖于HttpContext,而我们在上一篇中的沙箱模式已经把一次http请求转换为反射调用,并且http上下文不支持跨域,所以我们要重造一个contro ...

  6. 第二篇 基于.net搭建热插拔式web框架(沙箱的构建)

    上周五写了一个实现原理篇,在评论中看到有朋友也遇到了我的问题,真的是有种他乡遇知己的感觉,整个系列我一定会坚持写完,并在最后把代码开源到git中.上一篇文章很多人看了以后,都表示不解,觉得不知道我到底 ...

  7. 基于.net搭建热插拔式web框架(实现原理)

    第一节:我们为什么需要一个热插拔式的web框架? 模块之间独立开发 假设我们要做一个后台管理系统,其中包括“用户活跃度”.“产品管理”."账单管理"等模块.每个模块中有自己的业务特 ...

  8. net搭建热插拔式web框架

    net搭建热插拔式web框架(重造Controller) 由于.net MVC 的controller 依赖于HttpContext,而我们在上一篇中的沙箱模式已经把一次http请求转换为反射调用,并 ...

  9. net搭建热插拔式web框架(沙箱的构建)

    net搭建热插拔式web框架(沙箱的构建) 上周五写了一个实现原理篇,在评论中看到有朋友也遇到了我的问题,真的是有种他乡遇知己的感觉,整个系列我一定会坚持写完,并在最后把代码开源到git中.上一篇文章 ...

随机推荐

  1. EC笔记:第4部分:18、接口正确使用,不易被误用

    好的接口容易被正确使用,不易被误用 考虑以下函数: void func(int year,int month,int day){ //一些操作 } 这个函数看似合理,因为参数的名字已经暴露了它的用途. ...

  2. Android Studio同时打开多个项目

    Android Studio的默认设置是打开第二个项目时,第一个项目就被自动关闭了,如果要同时打开多个项目,可以点击File->Settings,对Project Opening进行下面的设置: ...

  3. 严重: Exception sending context initialized event to listener instance of class

    问题描述:Exception sending context initialized event to listener instance of class org.springframework.w ...

  4. python 学习笔记 -logging模块(日志)

    模块级函数 logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root loggerlogging.debug().logging.info().lo ...

  5. CSS代码规范

    空格 选择器 与 { 之间必须包含空格. 列表型属性值 书写在单行时,, 后必须跟一个空格. 属性名 与之后的 : 之间不允许包含空格, : 与 属性值 之间必须包含空格. margin: 0; .+ ...

  6. 自己写的HTML5 Canvas + Javascript五子棋

    看到一些曾经只会灌水的网友,在学习了前端之后,已经能写出下载量几千几万的脚本.样式,帮助大众,成为受欢迎的人,感觉满羡慕的.我也想学会前端技术,变得受欢迎呀.于是心血来潮,开始学习前端知识,并写下了这 ...

  7. Dynamics CRM 2015-超大Solution导入问题

    我们在将比较大的solution导入CRM的时候,经常会遇到超时的问题,这是因为CRM的本身的优化限制导致的,那么如何解决呢? 官方已经有了解决方案了. 在浏览完两种解决方法之后,我们要知道的是: 1 ...

  8. QQ互联登录以及非官方正版应用报100044错误

    QQ第三方登录的时候,显示非官方正版应用,报100044错误:坑1:我们在QQ互联注册成功后需要设置包名和签名,签名是通过官方提供的工具生成的.注意一点:这里的签名是需要由打包签名之后APK生成,我们 ...

  9. GCD的相关函数使用

    GCD 是iOS多线程实现方案之一,非常常用 英文翻译过来就是伟大的中枢调度器,也有人戏称为是牛逼的中枢调度器 是苹果公司为多核的并行运算提出的解决方案 1.一次性函数 dispatch_once 顾 ...

  10. python(一)

    python数学函数 abs(x) 返回数字的绝对值,如abs(-10) 返回 10 ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5 cmp(x, y) 如果 x < ...