Winform的三层架构的示例.doc_第1页
Winform的三层架构的示例.doc_第2页
Winform的三层架构的示例.doc_第3页
Winform的三层架构的示例.doc_第4页
Winform的三层架构的示例.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

最近在CSDN上看到有朋友求Winform的三层架构的示例,网上也确实没有多少是Winform的。于是本人牺牲一点时间,做了这个小Demo,希抛砖引玉,望各路老手不吝指教。 至于什么是“三层结构”、三层结构有什么好处、为什么要用三层结构,我想这些讨论,网上大把,Google 或者 Baidu一下就有一大串。我也就不多说,直接用一个例子来讲述如何实现一个多层架构的WinForm程序。 在该例子,我选用的是VS.net 2005 + Access 实现,考虑至数据库的可移槙性,数据访问层使用工厂模式,利用.net 的反射在运行时根据配置文件来动态决定采用何用数据库。 好了,进入正题: 首先,设定数据库如下 :字段名称 数据类型 默认值 备注说明BS_NO Text N 工号BS_NAME Text N 姓名对于,多层架构,我一般都按照预先新建一个空的方案。然后分别新加EntityReflect(实体层)、DALFactory(数据访问层,工厂类), Business(中间业务层)、WinForm(表示界面层),并设定WinForm为启始专案,该专案为WinForm模板,其它全部可作为 Class Library模板,设定各专案的相依:Business依赖DALFactory、WinForm依赖Business,完了之后,选取整个方案,编译。在Business层引用DALFactory、WinForm层中引用Business.至上上面的数据访问层并没有针对特定的数据库的数据访问类,所以,再加一个DataAccess Class Library层,该层就是专门针对Access数据访问的。同样设定该层依赖DALFactory,并参考引用DALFactory.再次编译一次,我们就进入代码编制阶段了。 其实,我们上面的操作,已基本上具备了我上面所说了这个Demo的全部内容了,只是还没有代码而已啦。好,下面我们就添加代码: 打开EntityReflect专案,将默认的Class1.cs 改为EREmployee.cs,这就是我们的实体规范层,关于这个,我们可以在网上下载一些工具自动生成。不过,在我这个方案,我却一直没有在任何地方引用他。原因其实是我自己也不是很能弄清为什么一定要这个规范层。不过,我还是写了如下的代码:using System;using System.Collections.Generic;using System.Text;namespace EntityReflectpublic class EREmployeepublic EREmployee()private String strbs_no;private String strbs_name;public String strBS_NOget return strbs_no; set strbs_no = value; public String strBS_NAMEget return strbs_name; set strbs_name = value; 展开DALFactory层.新加一个IDataAccessObject.cs,目的是为了规范各种数据库访问数据库时使用相同的方法,该接口的代码如下:using System;using System.Data;namespace DALFactorypublic interface IDataAccessObjectvoid Query(DataSet ds, string strTableName);void Save(string strBS_NO, string strBS_NAME);另外,由于我使用了C#的RTTI,所以,还加了一个类GetDatabaseType.cs,代码如下:using System;using System.Configuration;using System.Reflection;namespace DALFactorypublic class GetDatabaseTypepublic IDataAccessObject GetDatabase()string strAssemblyName = ConfigurationManager.AppSettingsAssemblyName;string strConstractor = ConfigurationManager.AppSettingsConstractor;return (IDataAccessObject)Assembly.Load(strAssemblyName).CreateInstance(strConstractor, false);有了数据访问层的工厂,展开DataAccess数据访问层,将默认的Class1.cs 改为DataAccess.cs,输入以下代码:using System;using System.Data;using System.Data.OleDb;using DALFactory;namespace DataAccesspublic class DAOAccess:IDataAccessObjectprivate const string strConn = Provider = Microsoft.Jet.OLEDB.4.0;Data Source=D:SHS_DevelopSolutionDBSolution.mdb;#region IDataAccessObject 成員public void Query(System.Data.DataSet ds, string strTableName)string strSql = Select * From Employee;using (OleDbConnection Conn = new OleDbConnection(strConn)using (OleDbDataAdapter adapter = new OleDbDataAdapter(strSql, Conn)adapter.Fill(ds, strTableName);public void Save(string strBS_NO, string strBS_NAME)string strSql = Insert Into Employee(BS_NO,BS_NAME) Values(BS_NO,BS_NAME);using (OleDbConnection Conn = new OleDbConnection(strConn)using (OleDbCommand Comm = new OleDbCommand(strSql, Conn)Comm.Parameters.Add(new OleDbParameter(BS_NO, OleDbType.VarChar,10);Comm.Parameters.Add(new OleDbParameter(BS_NAME, OleDbType.VarChar, 10);Comm.ParametersBS_NO.Value = strBS_NO;Comm.ParametersBS_NAME.Value = strBS_NAME;Conn.Open();Comm.ExecuteNonQuery();Conn.Close();#endregion展开Business层,将Class1.cs改为:BusinessLogic.cs,输入如下代码:using System;using DALFactory;namespace Businesspublic class BusinessLogicpublic void Query(System.Data.DataSet ds, string strTableName)(new GetDatabaseType().GetDatabase().Query(ds, strTableName);public void Save(string strBS_NO, string strBS_NAME)(new GetDatabaseType().GetDatabase().Save(strBS_NO, strBS_NAME);最后,展开WinFrom层,在窗体上拖一个DatagridView、两个label,两个textBox和两个button过来,Name属性分别改为:FrmMain、dgvMain、tbxBS_NO,tbxBS_NAME,btnQuery,btnSave,输入如下代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using Business;using RealBusiness;namespace WinFormpublic partial class FrmMain : Formpublic FrmMain()InitializeComponent();private void btnQuery_Click(object sender, EventArgs e)DataSet ds = new DataSet();(new BusinessLogic().Query(ds,Employee);this.dgvMain.DataSource = ds;this.dgvMain.DataMember = Employee;private void bt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论