近来,看园子里,好多同学,展示自己工作中的开发框架,有的功能强大,有的短小精悍,我也来凑个热闹,望各位大侠指点一二。

一、指导思想

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)的更多相关文章

  1. 开发框架(WinForm)3

    我的开发框架(WinForm)3 今天继续给大家介绍核心库的IOC的使用,在我的框架里,IOC使用的比较简单,主要是用于解除模块间的耦合和实例化接口. 1.接口说明,IocContainer接口比较简 ...

  2. RDIFramework.NET敏捷开发框架WinForm新增文件中心-实现附件集中管理

    1.引言 文件中心类似附件管理是一个非常实用功能,可以归档自己平时所需要的文件,也可以把文件分享给别人,更像一个知识中心.文件中心主界面如下图所示,左侧"附件分类"展示了用户对文件 ...

  3. 我的开发框架(WinForm)2

    上篇文章简单的介绍了一下,我的一个开发框架.看的人还不少,多谢大家的关注,我继续介绍一下,模块和模块之间是怎么组织起来的. Data模块: 该模块主要完成对数据的操作,采用仓储模式实现,在核心模块(C ...

  4. 我的开发框架(WinForm)4

    日志模块 对于一个系统来说,日志模块是必不可少的,它能给后面系统的维护和bug的修复,带来极大的方便..net的日志模块有很多,比较流行的有Log4Net,NLog,还有微软企业库的日志模块,我采用的 ...

  5. 我的开发框架(WinForm)3

    今天继续给大家介绍核心库的IOC的使用,在我的框架里,IOC使用的比较简单,主要是用于解除模块间的耦合和实例化接口. 1.接口说明,IocContainer接口比较简单只有3个方法,但是是系统中用的最 ...

  6. WinForm开发中通用附件管理控件设计开发参考

    1.引言 在WinForm开发中,文件附件的管理几乎在任何一个应用上都会存在,是一个非常通用集中的公共模块.我们日常记录会伴随着有图片.文档等附件形式来展现,如果为每个业务对象都做一个附件管理,或者每 ...

  7. RDIFramework.NET ━ .NET敏捷开发框架全新发布-最好用的.NET开发框架 100%源码授权

    RDIFramework.NET,基于.NET的快速信息化系统敏捷开发框架.10年沉淀.历经上千项目检验,致力于企业智能化开发,帮助提升软件开发效率.最好用的.NET开发框架,100%源码授权. 1. ...

  8. RDIFramework.NET敏捷开发框架 ━ 工作流程组件介绍

    RDIFramework.NET,基于.NET的快速信息化系统敏捷开发.整合框架,给用户和开发者最佳的.Net框架部署方案. 1.RDIFramework.NET敏捷开发框架介绍 RDIFramewo ...

  9. RDIFramework.NET敏捷开发框架Web新增邮件中心实现便捷式的邮件收发

    1.引言 邮件收发在很多业务系统中都有这样的需求,是比较正式和常用的功能.在我们的框架中提供了邮件中心功能模块,集内部邮件的收发.邮件归类.邮件星标的标记.邮件的删除与彻底删除等,邮件中心功能模块界面 ...

随机推荐

  1. codeforces 629D 树状数组+LIS

    题意:n个圆柱形蛋糕,给你半径 r 和高度 h,一个蛋糕只能放在一个体积比它小而且序号小于它的蛋糕上面,问你这样形成的上升序列中,体积和最大是多少 分析:根据他们的体积进行离散化,然后建树状数组,按照 ...

  2. RhinoMocks简单范例

    using System; namespace MockTest { public interface IBBB { int Number { get; } int Compute(int j); i ...

  3. windows下python配置

    1.下载安装 Pythonpython-2.7.5.msi  http://www.python.org/download/如下载 Python 2.7.5,安装目录为 C:\Python27 2.添 ...

  4. SQL Server: Difference Between Locking, Blocking and Dead Locking

    Like ever, today’s article of Pinal Dave was interesting and informative. After, our mutual discussi ...

  5. iptables端口重定向

    需求:     tomcat容器使用普通用户启动不能开启1024以内端口,也就80端口不能使用.业务上通常使用80端口访问. 解决方法:     iptables既是防火墙也是带路由器功能.所以使用它 ...

  6. leetcode@ [208] Implement Trie (Prefix Tree)

    Trie 树模板 https://leetcode.com/problems/implement-trie-prefix-tree/ class TrieNode { public: char var ...

  7. jqgrid 中设置列不排序

    背景 今天在做系统的功能时,当时有这么个需求:在添加了一行数据时,原本的排序的自动就不能再排序,也就是排序失效. 1. 使用onSortCol事件禁止排序列 当时使用了初始化时,使用onSortCol ...

  8. Kooboo中如何切换数据库(注意:如果切换数据库,需要Kooboo中没有一个website 否则会报错数据库中没有表之类的)

    Setup database provider 来自Kooboo document   Kooboo CMS can almost support all the types of database, ...

  9. hdoj 2084 数塔

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  10. 射频识别技术漫谈(2)——国际标准【worldsing 笔记】

    如果你只是智能卡的用户,通常可以不必关注国际标准,但作为智能卡的专业开发人员,则至少也要对相关标准有所了解.国际标准一般都是西方人制定的,原版都是英文的,而所谓中文版往往是对原版的直译,许多情况下并未 ...