我的开发框架(WinForm)
近来,看园子里,好多同学,展示自己工作中的开发框架,有的功能强大,有的短小精悍,我也来凑个热闹,望各位大侠指点一二。
一、指导思想
1、尽量减少程序员对数据库的依赖,或者说尽力少的写sql 语句。根据以前做项目的经验,大概10%的代码时间,在拼sql,主要是想利用现有的ORM技术,使得程序员能摆脱大部分拼sql的工作。
2、支持多种数据比如Sqlerver、Oracle等。公司是做项目为主,不同的项目甲方要求的数据库可能会不同,所以必须支持多数据库。sqlserver和oracle是最常用的,优先支持。
3、模块化,功能模块间可插拔设计。系统的各个模块间没有必然的联系,可以通过复制一个dll或几个dll,简单的配置一下权限,有的甚至不需要配置,即可使用。
4、集成日志和权限功能。这两块是系统框架最基本的东西,必须有的。
5、针对接口编程。有些功能不是从底层写的,是基于第三方的软件进行二次开发的,比如GIS,CAD,不同的项目,选用的平台会有不同。如果更换了二次开发的平台,那么将相关的接口再实现一遍,不影响其他模块。
6、面向业务。做项目的公司,不做业务,就没饭吃了。因此,程序员的主要精力应该是理解业务和实现业务。
7、要易于扩展易于部署。技术是不断发展的,业务也是不断变化的,不同的地区,不同的公司的业务是千差万别的,领导的想法也是不断变化的,因此必须容易修改,方便部署。
二、框架设计
下面是我针对CS模式的一个设计,
你也许已经看过很多架构示意图,我的这个算是比较简陋的一个了,但我觉得能说明的我的设计的东西。整个图分为三块:图例、整体结构、单模块结构。
首先左上角的是图例,右上角的是一个模块的结构,下面的部分是整体的。
先说说图例,蓝色方块 标示定义的接口,没有真正的实现代码。橙色方块是针对接口的实现。橙色到蓝色的渐变方块 是既有接口又有默认实现。
模块分为3种:核心模块、非业务模块和业务模块。顾名思义,核心模块定义了一系列的通用接口,和部分默认的实现。非业务模块是指和业务无关的模块,用于支撑业务的实现。比如数据操作模块。主要封装数据库的操作。业务模块指针对项目的需求进行实现的模块。
- 核心模块: Core模块,主要定义了数据操作的接口,日志接口、配置的接口、权限的接口。
- 非业务模块:Data模块,这个模块主要实现针对实体的一个增删改查的操作,不同的数据库有不同的实现。
- Auth模块,实现权限管理的模块。
在一个业务模块中包括以下内容
Menu(菜单):模块汇总包括哪些菜单,或者说实现了哪些业务的功能。单击一个菜单后,执行什么操作,展示哪些界面等。
Tool(工具条):模块包括哪些工具,执行什么操作,展示哪些界面等。
Control:模块中的子界面。
三、用到的技术
基于.net4.0实现。用到的组件
1、Mef。 插件机制的实现,.net4.0自带
2、ServiceStack.OrmLite。 Orm映射的实现,之所以选他是因为,它是针对单表设计的,比较简单易用,不用配置。NHibernate配置太多,容易搞错,EntityFramework目前只支持Sqlserver,不符合要求。
3、Autofac。Ioc组件
4、Log4Net。这个不用多说了。
四、项目组织
不多说啦,上图
在实现过程中,增加了Common组件,提取通用的功能,Core.Map组件,提取地图相关的接口。
我的开发框架(WinForm)的更多相关文章
- 开发框架(WinForm)3
我的开发框架(WinForm)3 今天继续给大家介绍核心库的IOC的使用,在我的框架里,IOC使用的比较简单,主要是用于解除模块间的耦合和实例化接口. 1.接口说明,IocContainer接口比较简 ...
- RDIFramework.NET敏捷开发框架WinForm新增文件中心-实现附件集中管理
1.引言 文件中心类似附件管理是一个非常实用功能,可以归档自己平时所需要的文件,也可以把文件分享给别人,更像一个知识中心.文件中心主界面如下图所示,左侧"附件分类"展示了用户对文件 ...
- 我的开发框架(WinForm)2
上篇文章简单的介绍了一下,我的一个开发框架.看的人还不少,多谢大家的关注,我继续介绍一下,模块和模块之间是怎么组织起来的. Data模块: 该模块主要完成对数据的操作,采用仓储模式实现,在核心模块(C ...
- 我的开发框架(WinForm)4
日志模块 对于一个系统来说,日志模块是必不可少的,它能给后面系统的维护和bug的修复,带来极大的方便..net的日志模块有很多,比较流行的有Log4Net,NLog,还有微软企业库的日志模块,我采用的 ...
- 我的开发框架(WinForm)3
今天继续给大家介绍核心库的IOC的使用,在我的框架里,IOC使用的比较简单,主要是用于解除模块间的耦合和实例化接口. 1.接口说明,IocContainer接口比较简单只有3个方法,但是是系统中用的最 ...
- WinForm开发中通用附件管理控件设计开发参考
1.引言 在WinForm开发中,文件附件的管理几乎在任何一个应用上都会存在,是一个非常通用集中的公共模块.我们日常记录会伴随着有图片.文档等附件形式来展现,如果为每个业务对象都做一个附件管理,或者每 ...
- RDIFramework.NET ━ .NET敏捷开发框架全新发布-最好用的.NET开发框架 100%源码授权
RDIFramework.NET,基于.NET的快速信息化系统敏捷开发框架.10年沉淀.历经上千项目检验,致力于企业智能化开发,帮助提升软件开发效率.最好用的.NET开发框架,100%源码授权. 1. ...
- RDIFramework.NET敏捷开发框架 ━ 工作流程组件介绍
RDIFramework.NET,基于.NET的快速信息化系统敏捷开发.整合框架,给用户和开发者最佳的.Net框架部署方案. 1.RDIFramework.NET敏捷开发框架介绍 RDIFramewo ...
- RDIFramework.NET敏捷开发框架Web新增邮件中心实现便捷式的邮件收发
1.引言 邮件收发在很多业务系统中都有这样的需求,是比较正式和常用的功能.在我们的框架中提供了邮件中心功能模块,集内部邮件的收发.邮件归类.邮件星标的标记.邮件的删除与彻底删除等,邮件中心功能模块界面 ...
随机推荐
- DELPHI 中的Delay函数,利用GetTickCount和Application.ProcessMessages构建
作者 关劲松 delphi 开发中有些时候需要停留片刻,等待界面输入,或异步操作完成,如果使用sleep函数的话,整个程序都会停顿,界面还会出现冻结的情况.因此需要自行编写一个 ...
- codeforces 672C - Recycling Bottles 贪心水题
感觉很简单,就是讨论一下 #include <stdio.h> #include <string.h> #include <algorithm> #include ...
- eclipse+xdebug
root@leeyoung-Satellite-M300:/etc/apache2/sites-available# nano 000-default.conf <IfModule dir_mo ...
- 树-二叉平衡树AVL
基本概念 AVL树:树中任何节点的两个子树的高度最大差别为1. AVL树的查找.插入和删除在平均和最坏情况下都是O(logn). AVL实现 AVL树的节点包括的几个组成对象: (01) key -- ...
- 使用 EasyBCD 安装Ubuntu 14.04 Error 15: file not found错误的解决方法
今天安装Window7 和 Ubuntu 14.04 双系统时,出现如下异常,记录一下. 安装过程是参考 http://www.linuxidc.com/Linux/2014-04/100369.ht ...
- HDU4614 Vases and Flowers
http://acm.hdu.edu.cn/showproblem.php?pid=4614 HDU 4614 Vases and Flowers (2013多校第二场线段树) // #pragma ...
- uva 11468 Substring
题意:给你 k 个模板串,然后给你一些字符的出现概率,然后给你一个长度 l ,问你这些字符组成的长度为 l 的字符串不包含任何一个模板串的概率. 思路:AC自动机+概论DP 首先用K个模板构造好AC自 ...
- codeforce 603B - Moodular Arithmetic
题意:给出方程 f(kx%p)=kf(x)%p ,f:A->B,不同的映射函数f有几种,其中f,A,B值域为{0,1,2..p-1},p为素数(除了2),k为小于p的一个常数. 思路:明显是求循 ...
- linux命令getopts
一.getopts 简介 由于shell命令行的灵活性,自己编写代码判断时,复杂度会比较高.使用内部命令 getopts 可以很方便地处理命令行参数.一般格式为: getopts options va ...
- 转载 SharePoint【Site Definition 系列】– 创建Content Type
转载原地址: http://www.cnblogs.com/wsdj-ITtech/archive/2012/09/01/2470274.html Sharepoint本身就是一个丰富的大容器,里面 ...