用三层架构来做winform程序

来源:互联网 发布:客服数据分析表 编辑:程序博客网 时间:2024/04/29 04:35
  三层架构是一种代码分层思想,简单的说就是将一个项目分为界面展示、业务逻辑、数据访问三层,各层之间保持一定的独立性,降低代码之间的耦合性,这样做的好处是显而易见的:

1、各层之间的改动不会影响到其他层(比较大的变动除外,如果客户要求业务流程、数据库结构都变了,你还期望有什么不会变呢)

2、基本不用写SQL语句了,自动生成的代码是参数化查询,可以防止SQL注入

3、代码条理清楚,便于理解
  当然三层架构不是拯救一切的灵丹妙药,比如:
1、比较小的项目何必纠结用什么架构呢,在你琢磨架构的时候,用winform可能已经写完了

2、速度会有所降低,相对于直接访问数据库,三层架构增加了中间层,速度降低是肯定的

  说到三层架构,可能第一时间想到的就是mvc,然而三层架构并不是web的专利,归根结底,三层架构只是一种代码分层思想,winform当然也可以用,只不过界面展示这块,mvc是网页的形式,winform是windows窗体,其他两层思路是一样的。
  下面就以一个非常简单常见的商铺展示程序来实际讲解winform中如何实现三层架构。
一、前期准备

1、动软代码生成器,国产神器,你值得拥有,全自动生成数据访问层代码,百度就能找到,最后一版是2.78,作者没有继续更新了。已经免费开源,喜欢研究源代码的可以继续扩展。

李天平的博客

http://blog.csdn.net/litp

http://www.cnblogs.com/ltp/category/44293.html

2、SQLiteStudio,选择SQLite数据库是因为轻巧、无需安装,对于这个示例程序足够用了  ,SQLiteStudio是免费好用的SQLite数据库图形化管理工具,百度可得绿色版。
二、开发过程

1、下载动软代码生成器,安装完成之后运行,连接到附件示例程序的SQLite数据库,打开连接,右键点击数据库,选择“新建.net项目”,选择“简单三层结构”,下一步,选择“Shops”、“Users”两个表,点击“开始生成”。

2、来到生成目录,打开源代码,可以看到5个项目,下面分别说说他们的作用

BLL--业务逻辑层,所有的业务逻辑全部写在这里,动软已经为每个表自动生成了一个业务类,类名就是表名,BasicMethod区段是自动生成的一些基础方法,比如增删改查、分页查询这些,ExtensionMethod区段是空的,我们自己写的业务代码写在这个区段。

DAL--数据访问层,所有的数据库访问的基础方法写在这里,动软已经为每个表自动生成了一个数据访问类,类名就是表名,BasicMethod区段是自动生成的一些基础方法,比如增删改查、分页查询这些,ExtensionMethod区段是空的,如果我们觉得这些基础的数据库操作方法不够用,可以在这个区段添加自己的数据库操作方法,但是只有数据库的操作方法应该写在DAL类库。

DBUtility--数据库访问的基础类库,封装了MySql,Sql,OLE,SqlLite,Oracle等数据库访问的方法,与ADO.NET相关的connection,DataAdapter,Command等全部在这里,DAL是在DBUtility基础上的进一步封装的,这个类库基本不需要修改。

Model--数据库表结构的映射,每一个类名代表数据库中的一个相同名字的表,类的每一个字段、属性表示表中对应的字段,数据库的一条记录就对应类的一个对象,这个类库基本不需要修改。

Web-- 一些基础的网页,因为我们是做winform的,所以这个不需要了,但是先别急着删,等下我们还要来拷连接字符串。

最后在解决方案文件夹下有一个Lib文件夹,是一些动态链接库,看看上述每个项目缺什么就引用什么。

3、新建一个winform项目,在项目的属性里将目标框架设置为".net framework 4"(不是".net framework 4 profile"),这样就有一个app.config文件了,打开app.config,打开Web项目根目录下的Web.config文件,将appSettings整个一节拷贝到app.config文件configuration节点内,将连接字符串修改为SqlLite的格式,删除Web项目。

  补充一点,我们的程序是怎么得到连接字符串的呢?在DBUtility类库里,有一个PubConstant类,里面有一个ConnectionString属性,通过ConfigurationManager.AppSettings["ConnectionString"]读取了app.config文件里保存的连接字符串。

  接下来就是开始做界面,写代码了,winform相信大家都很熟悉了,具体过程我就不多说了,直接上源代码。

  示例程序源代码:

http://pan.baidu.com/s/1jIRZkfO

总结:

1、动软自带的SQLite动态链接库比较老,用他原来的运行不起来,我换成了新版的,在Lib文件夹下的SQLite.Interop.dll和System.Data.SQLite.DLL,System.Data.SQLite.DLL需要在项目中引用,SQLite.Interop.dll要手动拷贝到生成目录

2、如果代码写完后数据库结构发生了变化(比如增加了一个字段),我能想到的办法就是重新用动软生成一次,将BLL,DAL,DBUtility,Model替换掉,所以最好这几个项目中不要写自己的代码了,要扩展的话重新建项目吧。为什么不推荐手动改呢,因为即便是增加一个字段,也可能涉及到几个类的修改,改动大就更不用说了,手动改代码的话很有可能漏掉,能用最简单的办法搞定的事就用最简单的办法。


0 0
原创粉丝点击