我的开发框架(WinForm)2

上篇文章简单的介绍了一下,我的一个开发框架。看的人还不少,多谢大家的关注,我继续介绍一下,模块和模块之间是怎么组织起来的。

Data模块:

该模块主要完成对数据的操作,采用仓储模式实现,在核心模块(Core.Data)中定义操作接口和基础类. 主要的接口有IRepository,IUnitOfWork,IDbCnnFactory。

所有的数据库操作都是针对实体进行的,一个实体在数据库中对应一个比,目前为了简化操作,不考虑实体关联的操作。这样更加容易理解,更容易上手。

一、接口的定义

1、IRepository接口,最基本、最重要的接口。通过它完成实体类的增删改查的操作。

 

IRepository
2、其中实体类必须继承EntityBase<Tid>或 EntityBase 类,TId 是指ID的类型,每个实体必须有个主键Id,
EntityBase

    3、IDbCnnFactory接口主要完成数据库连接的维护工作

IDbCnnFactory

    4、IUnitOfWork接口主要实现将多个数据库操作组合成一个工作单元, 对数据库来说就是一个事务。

IUnitOfWork

 

另外还有几个辅助的接口,同样是在Core.Data中定义

     ISqlRepository:类似于以前的SQLHelper类,它里面只是定义了一些执行sql的方法。

     ITableManager :用于数据表的维护。新建、删除、重建表操作。
     PageResult<TEntity>:分页结果类,主要保存 共有多少页,当前第几页,以及当前页的数据。

     UnitOfWork类:IUnitOfWork接口的实现类。

     IStatRepository:简单的数据统计.

二、接口的实现

Data.Oracle是针对Oracle数据库的一个实现。

image

Repository类实现了一下接口一个是默认ID类型的,一个是可自定义ID类型的.

public class Repository<TEntity, Tid> : IRepository<TEntity, id>,IStatRepository<TEntity,Tid>,ISqlRepository 
where TEntity : EntityBase<Tid>, new()
 
public class Repository<TEntity> : Repository<TEntity, Guid>, IRepository<TEntity>, IStatRepository<TEntity>
 where TEntity : EntityBase, new()
   

OracleDbCnnFactory 实现就比较简单了,和写ADO.Net一样.唯一注意的就是增加了MEF的导出标签

 [Export(typeof(IDbCnnFactory))] ,MEF的使用,园子里有很多好的文章,我就不班门弄斧了

 

三、接口的使用

     比如我设计了一个菜单类,属性主要有显示的标题、关键字、序号等。

//获得菜单类操作的Repository
   var rep = ApplicationEx.Container.GetRepository<MenuInfo>();
   //查询所有可用的菜单,并排序
var ens=  rep.GetEntities(t => t.Enable == true).OrderBy(t=>t.PIndex);
返回的是 IEnumerable<MenuInfo>
 
关于ApplicationEx类,我们后面会介绍到。
通过以上这些接口,我相信90%的数据库操作,都能满足。如果你的系统对性能要求比较高的话,我建议直接写sql+ADO.Net写,执行效率会更好,也好优化。

我这样设计也考虑到Web程序的应用,毕竟程序能在web、手机上实现的都会移植过去,单机的项目会越来越少。

posted @ 2013-08-27 10:11  liuyh208  阅读(2911)  评论(9编辑  收藏  举报