EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 524|回复: 1
打印 上一主题 下一主题

[架构模式] 三层架构C/S程序设计实例(C#描述)

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-10 14:38:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.三层之间的关系:三层是指:界面显示层(UI),业务逻辑层(Business),数据操作层(Data Access)
文字描述
Clients对UI进行操作,UI调用Business进行相应的运算和处理,Business通过Data Access对Data Base进行操作。
优点
l
增加了代码的重用。Data Access可在多个项目中公用;Business可在同一项目的不同地方使用(如某个软件B/S和C/S部分可以共用一系列的Business组件)。
l
使得软件的分层更加明晰,便于开发和维护。美工人员可以很方便地设计UI设计,并在其中调用Business给出的接口,而程序开发人员则可以专注的进行代码的编写和功能的实现。
2.Data Access的具体实现:
DataAgent类型中变量和方法的说明:
private string m_strConnectionString; //连接字符串
private OleDbConnection m_objConnection; //数据库连接
public DataAgent(string strConnection) //构造方法,传入的参数为连接字符串
private void OpenDataBase() //打开数据库连接
private void #region CloseDataBase() //关闭数据库连接
public DataView GetDataView(string strSqlStat) //根据传入的连接字符串返回DataView
具体实现代码如下:
public class DataAgent
{
    private string m_strConnectionString;
   private OleDbConnection m_objConnection;
    #region DataAgend
    ///<summary>
    /// Initial Function
    ///</summary>
    ///<param name="strConnection"></param>
    public DataAgent(string strConnection)
    {
        this.m_strConnectionString = strConnection;
    }
    #endregion

    #region OpenDataBase
    ///<summary>
    /// Open Database
    ///</summary>
    private void OpenDataBase()
    {
        try
        {
            this.m_objConnection = new OleDbConnection();
            this.m_objConnection.ConnectionString = this.m_strConnectionString;
            if (this.m_objConnection.State != ConnectionState.Open)
            {
                this.m_objConnection.Open();
            }
        }
        catch (Exception e)
        {
            throw e;
        }
    }
    #endregion

    #region CloseDataBase
    ///<summary>
    /// Close Database
    ///</summary>
    private void CloseDataBase()
    {
        if (this.m_objConnection != null)
        {
            if (this.m_objConnection.State == ConnectionState.Open)
            {
                this.m_objConnection.Close();
            }
        }
    }
    #endregion

    #region GetDataView
    ///<summary>
    /// Execute the sql and return the default table view
    ///</summary>
    ///<param name="strSelectString">Select String</param>
    ///<returns>DataView of the DataTable</returns>
    public DataView GetDataView(string strSqlStat)
    {
        try
        {
            this.OpenDataBase();
            OleDbDataAdapter objDataAdapter = new OleDbDataAdapter(strSqlStat.Trim(), this.m_objConnection);
            DataSet objDataSet = new DataSet();
            objDataAdapter.Fill(objDataSet);
            return objDataSet.Tables[0].DefaultView;
        }
        catch (Exception e)
        {
            throw e;
        }
        finally
        {
            this.CloseDataBase();
        }
    }
    #endregion
}
3.Business的具体实现:
建立名为Base的类,此类作为其他事务类的基类,其中定义了一个DataAgent的实例。其他所有的Business类都从该改类派生。
在该类中添加对DataAgent的引用,使所有的事务类都能使用DataAgent中的方法。
Base.cs源代码:
public abstract class Base
{
    protected DataAgent OleDBAgent = new DataAgent("undefinedrovider=SQLOLEDB;Data Source=(local);DataBase=test;User ID=saundefinedWD=");
}
准备好了数据操作层和事务层的基类,底下就可以正式地开始业务逻辑类的开发了,如有一个显示新闻的类News,其中包含了一个GetNewsList()的方法,该方法用来获取所有的新闻标题列表,代码如下:
public class News : Base
{
    public DataView GetNewsList()
    {
        string strSql;
        strSql = "";
         strSql += " SELECT Top 10 NewsId,NewsTitle ";
        strSql += " FROM Tb_News";
        strSql += " WHERE NewsEnable = 1";
        strSql += " ORDER BY NewsId ";
        return OleDBAgent.GetDataView(strSql);
    }
}
由于数据库结构比较简单,在此就不再给出详细的表结构。
4.UI层对Business中接口的调用
首先,在窗体Form1中添加对News类的引用。
然后,在窗体Form1中添加一个(DataGridView)dgNews用来显示新闻列表。
在窗体的Form1_Load方法中添加如下代码:
private void Form1_Load(object sender, EventArgs e)
{
    News objNews = new News();
    this.dgNews.DataSource = objNews.GetNewsList();
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-16 11:28

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表