(转)第一次发博客-说说我的B/S开发框架(asp.net mvc + web api + easyui)
原文地址:http://www.cnblogs.com/xqin/archive/2013/05/29/3105291.html
前言
这些年一直在.net下做企业web系统开发,前前后后经历的不同的开发框架有五六个之多,一直想有一个比较简单灵活顺手的BS开发框架,网上也没有找到一个比较合适的能应用于企业系统开发的。去年辞职在家的时候,网上找了些东西,按照自己的想法实现一些东西,慢慢的形成现在的B/S开发框架。想接下来慢慢的写出来和大家共享下,这里面很多都是我自己的想法,并没有什么高深的设计模式,欢迎大家拍砖。
框架愿景
1、提高开发效率(尽量少的配置,尽量少写代码,尽量简单)
2、考虑较好的拓展性及winform及手机端接入的可能性(所有的数据访问均采用 ajax+ restful webservice实现)
3、数据访问层比较灵活高效,分页查询,支持多数据库
4、有一个不错不的UI
5、一些代码可以自动生成
技术选型
采用.net4.0作为基础技术平台,原来是采用.net4.5的,但是后来发现.net4.5不支持Windows Server2003,所以又降为.net4.0。
1、asp.net mvc 4.0 用于提供页面服务
2、asp.net web api 用于提供restful数据服务
3、fluentData 新型轻量级ORM模型用于数据持久方案
4、log4net 作为日志组件
5、json.net 作为序列化组件
6、文档方案(均为开源) 导出:Excel2007使用EPPlus、Excel2003使用NPOI、Word2003/2007使用DocX、Pdf使用Gios 压缩:Ionic.Zip、Ziplib
7、js库为jquery
8、UI选用jquery easyui 1.3.2
9、选knockoutjs为前端mvvm框架
10、css框架选用960gs
11、报表采用stimulsoft report(商业)
12、图形分析采用fusioncharts
简单实现图
框架分层
一、框架分层截图如下,主要是分了以下几层:
1、Zephyr.Core框架核心层:主要是一些服务基类,日志处理,参数处理等。
2、Zephyr.Data数据处理层:数据库操作类,引入FluentData并做了少量的修改以适应
3、Zephyr.Generator代码生成器:目前只能生成实体类及服务类
4、Zephyr.Utils工具类:里面包含了很多东西如转换函数,文档处理加密解密等等,我不喜欢引入太多的dll所以很类库我就直接加在它里面了。
5、Zephyr.WorkFlow工作流引擎:参照JBPM思想只实现了核心功能
二、框架的使用
直接在项目中引入框架的dll即可,早期的很多项目都是参照petshop分了很多的层,这里我不打算分太多的层,目的只有一个,要使框架使用起来尽量的简单。就直接使用Model 、View、Controller这mvc自带的三层,web api同mvc。其中Model层是广义的Model,其中包括数据实体的定义及数据服务。数据服务可以看做我们传统三层中的dal或bll + dal的。框架的作用主要在服务层,相当于服务层只要继承了框架的服务基类即可拥有所有我预定义的方法。所以后台分层只有mvc三层。
前台则采用mvvm的开发模式,把前端也分为三层分别为Model、View、ViewModel三层。Model即为后台传入的数据,View即为Razor页面,ViewModel则为一段处理页面与数据交互的脚本对象。这样一来,只要页面差不多ViewModel就可以直接重用了。
好了先写到这吧,第一次写博客,写的很慢,接下来我准备写以下几篇:
1、利用zephyr框架的登陆的实现
2、系统管理详细开发讲解(好多)
3、典型业务页面开发讲解
4、框架的功能及实现
先给大家截几开发出来的效果图,接下来的博客中我会详细讲解我的实现。
查询页面:
编辑页面:
系统管理:
(转)第一次发博客-说说我的B/S开发框架(asp.net mvc + web api + easyui)的更多相关文章
- 第一次写博客,关于前端开发deMVC在js中的应用
对前端MVC MVC分别是model.view.controller的缩写,模型.视图.控制器.这些更加偏向于后台,在以前MVC是只属于后台的.当然随着技术的进步,前端的大牛们将后台的一些东西应用于前 ...
- 第一次写博客Poj1044
Date bugs Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3005 Accepted: 889 Descript ...
- Beta版本——第一次冲刺博客
我说的都队 031402304 陈燊 031402342 许玲玲 031402337 胡心颖 03140241 王婷婷 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬 ...
- C蛮的全栈之路-node篇(二) 实战一:自动发博客
目录 C蛮的全栈之路-序章 技术栈选择与全栈工程师C蛮的全栈之路-node篇(一) 环境布置C蛮的全栈之路-node篇(二) 实战一:自动发博客 ---------------- 我是分割线 ---- ...
- HDU 2064 菜鸡第一次写博客
果然集训就是学长学姐天天传授水铜的动态规划和搜索,今天讲DP由于困意加上面瘫学长"听不懂就是你不行"的呵呵传授,全程梦游.最后面对连入门都算不上的几道动态规划,我的内心一片宁静,甚 ...
- Linux 桌面玩家指南:05. 发博客必备的图片处理和视频录制神器
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- 关于如何使用Microsoft Word发博客
关于如何使用Microsoft Word发博客 PS:以Microsoft Word 2010为例作具体操作,实际上Microsoft Word 2007也可以完成该功能,略有差异,但是只能是20 ...
- vscode发博客插件更新v0.1.0(可能会相对好用点吧)
距离上一次编写这个vscode在博客园发博客的插件已经过去好久了,那个时候vscode插件的功能也没有那么强大,期间有人提出问题来,也有人提出建议来,我一直没有抽出时间来维护,深感抱歉,直到有人加到我 ...
- 第一次的博客-简单的Markdown语法
第一次开通博客 从网上寻找了许多写博客的方法 我觉得对于我来说还是使用 Markdowm 比较容易一些 用我的第一篇博客来记一下一些比较简单常用的Markdown语法 本文参考来源Markdown语法 ...
随机推荐
- 选择排序的JavaScript实现
思想 原址比较的排序算法.即首先找到数结构中的最小值并将其放置在第一位,然后找到第二小的值将其放置在第二位...以此类推. 代码 function selectionSort(arr) { const ...
- tomcat启动报错:java.lang.NoClassDefFoundError
tomcat启动加载spring配置文件时报错,找不到类GetBooksRequest,经排查实际上该类已经存在.后来发现日志里还有一句: This is very likely to create ...
- python开发线程:死锁和递归锁&信号量&定时器&线程queue&事件evevt
一 死锁现象与递归锁 进程也有死锁与递归锁,在进程那里忘记说了,放到这里一切说了额 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将 ...
- linux 输入子系统之电阻式触摸屏驱动
一.输入子系统情景回忆ING...... 在Linux中,输入子系统是由输入子系统设备驱动层.输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成.其中设备 ...
- 关系数据库域关系演算语言QBE
QBE: Query By Example 基于屏幕表格的查询语言 查询要求:以填写表格的方式构造查询 用示例元素(域变量)来表示查询结果可能的情况 查询结果:以表格形式显示 QBE操作框架 ...
- 双杀 0day 漏洞(CVE-2018-8174)复现
漏洞描述: CVE-2018-8174 是 Windows VBScript Engine 代码执行漏洞. 微软在4月20日早上确认此漏洞,并于5月8号发布了官方安全补丁,对该 0day 漏洞进行了修 ...
- python's fifteenth day for me 递归函数
递归... def age(n): if n == 1: return 18 else: return age(n-1)+2 # 反复调用函数age() print(age(4)) l = [1,3, ...
- php各版本编译好的扩展模块下载地址
php各版本[,x86/64 v9/v11/v14 nts/ts]编译好的扩展模块下载地址: https://windows.php.net/downloads/pecl/releases/ ht ...
- DFS leetcode
把字符串转换成整数 class Solution { public: int StrToInt(string str) { int n = str.size(), s = 1; long long r ...
- android 命名规则
包名结构: 资源命名方式: