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

一、指导思想

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组件,提取地图相关的接口。

最新文章

  1. ffmpeg(2.6) rockplayer android 下编译 小记.
  2. Redis系列(二)—— 数据类型及其使用
  3. Android中SQLite应用详解(转)
  4. 用的最多的Android Studio 快捷键
  5. YII 自动引入juquery进行表单验证
  6. Hive MapJoin
  7. Android客户端与服务器交互中的token
  8. flask 动手写的接口平台
  9. 在linux环境下编译运行OpenCV程序的两种方法
  10. linux c 语言之--fseek(),fseeko(),fseeko64()讲解 (转载)
  11. java虚拟机的内存模型
  12. Spark 的 Shuffle过程介绍`
  13. D. Imbalanced Array
  14. 20155331《网路对抗》Exp8 WEB基础实践
  15. Android开发环境(发展演变)
  16. LdA笔记
  17. Paper Reading - Deep Visual-Semantic Alignments for Generating Image Descriptions ( CVPR 2015 )
  18. NYOJ 409 郁闷的C小加(三) (字符串处理)
  19. OSG的组成结构
  20. mysql "ON DUPLICATE KEY UPDATE" 的使用

热门文章

  1. spring+mybatis 多数据源整合
  2. Java中调用参数是数组的存储过程
  3. tpl + ccr
  4. java快速获取大图片的分辨率(大图片格式JPG,tiff ,eg)
  5. iOS开发UI篇—实现一个私人通讯录小应用【转】
  6. Js(Jquery)实现的弹出窗口
  7. #pragma once 与 #ifndef 解析(转载)
  8. Hdu 5289-Assignment 贪心,ST表
  9. Keil: warning: A1581W: Added 2 bytes of padding at address
  10. Widget only supports Widgets as children