程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 個人開發框架總結(一)

個人開發框架總結(一)

編輯:關於C#

在開發過程中,大家可能都發現,形成一套個人開發風格是相當重要,這也可以延伸為整個團隊的開發模式,甚至形成一個有形的開發框架。

我經過這一兩年的摸索,不斷的完善,現在大體形成了幾個東東,自己感覺還不錯,所以想貼出來與大家一起分享,如有需要的朋友,可以直接與我聯系。

大體有以下幾個類庫:

FaibClass.Data 數據訪問庫

FaibClass.Common.Windows WinForm框架庫

FaibClass.Windows.Forms WinForm控件庫(目前只有TreeList及一些TextBox控件)

FaibClass.Update 在線更新庫

在以後的幾天裡將分別做一些介紹

一、FaibClass.Data

主要是提供數據訪問操作的類庫,可支持SqlServer、Oracle、及各種OleDb數據庫。

DataHelper 核心類 提供各種數據訪問方法。先說一下它的幾個方法和屬性:

ExecuteDataTable 填充數據到DataTable,共12種重載

ExecuteNonQuery 執行Sql語句

ExecuteReader 執行查詢語句返回IDataReader

ExecuteScalar 執行查詢,返回當個結果

FillDataset 填充DataSet,共12種重載

FillModelList 填充DataList,共12種重載

Update 更新DataTable或DataSet,共6種重載

BeginTransaction 開始事務,支付分布式事務

CommitTransaction 提交事務

RollbackTransaction 回滾事務

CreateParameters 創建參數集,因為使用存儲過程時SqlServer和Oracle的參數名稱不一樣,故用這個方法生成

OpenUpdateBag 打開更新開關,在使用Update前,要使用這個方法把相應的sql語句保存到內存中,以在Update時能夠更新到數據庫

CloseUpdateBag 關閉更新開關

ParameterPrefix 當前數據操作的存儲過程參數名稱的前綴,如SqlServer的@和Oracle的:

下面是具體的操作類型,SqlServer、Oracle、OleDb都是繼承自DataHelper的,但並未為每一個操作類都寫出各種數據操作的方法,這也主要是為了好維護,這幾個類同時實現IDataProvider接口,這個接口就是為每種類型提供DbConnection、DbParameter、DataAdapter、DbCommand等。如SqlServer裡是這樣寫到的:

public class SqlServer : DataHelper, IDataProvider
{
        #region IDataConverter
        IDbConnection IDataProvider.GetDbConnection()
        {
            SqlConnection conn = new SqlConnection(ConnectionString);
            conn.StateChange += new StateChangeEventHandler(base.OnStateChange);
            return conn;
        }

        IDbDataAdapter IDataProvider.GetDataAdapter()
        {
            return new SqlDataAdapter();
        }

        IDataParameter IDataProvider.GetParameter()
        {
            return new SqlParameter();
        }

        IDataParameter[] IDataProvider.GetParameters(int Count)
        {
            return new SqlParameter[Count];
        }

        IDbCommand IDataProvider.GetCommand(IDbCommand command)
        {
            return command as SqlCommand;
        }

        void IDataProvider.GetCommandBuilder(IDbDataAdapter DataAdapter, DataTable DataTable, DataViewRowState dataViewRowState)
        {
            SqlDataAdapter adapter = (SqlDataAdapter)DataAdapter;
            SqlCommandBuilder cmdb = new SqlCommandBuilder(adapter);
        }
        #endregion
}

這樣,每一個類就好維護了,Oracle就使用OracleConnection,OleDb就使用OleDbConnection。

Parameter 存儲過程參數類,這跟System.Data裡的差不多,都是實現同樣的一個功能,只是說使用這個的時候,ParameterName不用具體的加入@或:這樣的前綴。

ParameterCollection 存儲過程參數集合類,這裡面特別的有幾個方法

Format 可以格式化Sql查詢語句,比如在使用添加或修改的時候,可以這樣使用

dataHelper.ExecuteNonQuery(params.Format("insert into table({0}) values({1})"), params);

dataHelper.ExecuteNonQuery(params.Format("update table set {0}"), params);

BaseModel 數據模型基類,所有的數據模型都是繼承這個類,如TB_BUY_BILL.cs

using System;
using FaibClass.Data;

namespace WindowsApplication1
{
    /// <summary>
    /// 模型類
    /// </summary>
    [Serializable]
    public class TB_BUY_BILL : BaseModel
    {
        #region 表映射
        /// <summary>
        /// 表名稱
        /// </summary>
        public override string TableName
        {
            get { return "TB_BUY_BILL"; }
        }
        /// <summary>
        /// 表名稱
        /// </summary>
        public static string _TableName = "TB_BUY_BILL";
        /// <summary>
        /// 主鍵
        /// </summary>
        public override string PrimaryKey
        {
            get { return "BUY_BILL_ID"; }
        }
        /// <summary>
        /// 主鍵
        /// </summary>
        public static string _PrimaryKey = "BUY_BILL_ID";

        public override DataColumn GetDataColumn(string ColumnName)
        {
            DataColumn column = new DataColumn();
            switch (ColumnName)
            {

                case "BUY_BILL_ID":
                    column.ColumnName = "BUY_BILL_ID";
                    column.ColumnSize = 200;
                    column.DbType = 16;
                    column.IsPrimaryKey = true;
                    column.Precision = 0;
                    column.Scale = 0;
                    return column;

                case "BILL_TYPE":
                    column.ColumnName = "BILL_TYPE";
                    column.ColumnSize = 0;
                    column.DbType = 10;
                    column.IsPrimaryKey = false;
                    column.Precision = 0;
                    column.Scale = 0;
                    return column;

                case "BILL_NO":
                    column.ColumnName = "BILL_NO";
                    column.ColumnSize = 200;
                    column.DbType = 16;
                    column.IsPrimaryKey = false;
                    column.Precision = 0;
                    column.Scale = 0;
                    return column;

                case "DEPARTMENT_NAME":
                    column.ColumnName = "DEPARTMENT_NAME";
                    column.ColumnSize = 200;
                    column.DbType = 16;
                    column.IsPrimaryKey = false;
                    column.Precision = 0;
                    column.Scale = 0;
                    return column;

                case "SALED_AMOUNT":
                    column.ColumnName = "DEPARTMENT_NAME";
                    column.ColumnSize = 0;
                    column.DbType = 11;
                    column.IsPrimaryKey = false;
                    column.Precision = 0;
                    column.Scale = 0;
                    return column;

                case "CONTRACT_AMOUNT":
                    column.ColumnName = "CONTRACT_AMOUNT";
                    column.ColumnSize = 0;
                    column.DbType = 11;
                    column.IsPrimaryKey = false;
                    column.Precision = 0;
                    column.Scale = 0;
                    return column;

            }
            return null;
        }
        #endregion

        #region 字段常量

        public static string _BUY_BILL_ID = "BUY_BILL_ID";
        public static string _BILL_NO = "BILL_NO";
        public static string _BILL_TYPE = "BILL_TYPE";
        public static string _DEPARTMENT_NAME = "DEPARTMENT_NAME";
        public static string _SALED_AMOUNT = "SALED_AMOUNT";
        public static string _CONTRACT_AMOUNT = "CONTRACT_AMOUNT";
        #endregion

        #region 成員

        private string m_BUY_BILL_ID;
        private BILL_TYPE m_BILL_TYPE;
        private string m_BILL_NO;
        private string m_DEPARTMENT_NAME;
        private decimal m_SALED_AMOUNT;
        private decimal m_CONTRACT_AMOUNT;
        #endregion

        #region 屬性

        public string BUY_BILL_ID
        {
            get { return m_BUY_BILL_ID; }
            set { m_BUY_BILL_ID = value; }
        }

        public BILL_TYPE BILL_TYPE
        {
            get { return m_BILL_TYPE; }
            set { m_BILL_TYPE = value; }
        }

        public string BILL_NO
        {
            get { return m_BILL_NO; }
            set { m_BILL_NO = value; }
        }

        public string DEPARTMENT_NAME
        {
            get { return m_DEPARTMENT_NAME; }
            set { m_DEPARTMENT_NAME = value; }
        }

        public decimal SALED_AMOUNT
        {
            get { return m_SALED_AMOUNT; }
            set { m_SALED_AMOUNT = value; }
        }

        public decimal CONTRACT_AMOUNT
        {
            get { return m_CONTRACT_AMOUNT; }
            set { m_CONTRACT_AMOUNT = value; }
        }

        #endregion
    }

    public enum BILL_TYPE
    {
        [EnumText("電子")]
        ELE = 0,
        [EnumText("手工")]
        MAN = 1,
    }

    public enum BILL_STATE
    {
        [EnumText("暫存")]
        NoSave = 0,
        [EnumText("已保存")]
        Saved = 1,
    }

    /// <summary>
    /// 集合類
    /// </summary>
    [Serializable]
    public class TB_BUY_BILLs : DataModelList<TB_BUY_BILL>
    {
    }
}

上面已經提到DataModelList這個類了,實際就是一個List<T>泛型,沒有什麼特殊的屬性和方法。

BaseDataAccess 數據操作類,這裡面就整合了一些發新建實體、修改實體等方法。

Create 新建實體

Update 更新實體,共4種重載

Delete 刪除實體

DeleteBy 刪除多個實體

Get 獲得實體,共7種重載

IsExitst 判別實體是否存在,共4種重載

Select 查詢實體集,共9種重載

NewEntity 新實體

PageArgs 分頁參數

相關的例子TB_BUY_BILL_DA.cs

using System;
using FaibClass.Data;

namespace WindowsApplication1
{
    /// <summary>
    /// 數據庫類
    /// </summary>
    public class Database : OleDb
    {
        public Database()
        {
            base.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "\\test.mdb";
        }
    }

    /// <summary>
    /// DA操作類
    /// </summary>
    public class TB_BUY_BILL_DA : BaseDataAccess<TB_BUY_BILL, TB_BUY_BILLs>
    {
        public TB_BUY_BILL_DA() : base (new Database())
        {
        }
    }
}

DataColumn 數據列映射類,主要標明數據字段的各種屬性,比如數據類型等,在以上代碼中,已經看到GetDataColumn方法了。

EnumTextAttribute 枚舉說明特性類,主要是添加在枚舉上的,方便數據查詢顯示時直接轉為中文說明。

GetText 獲得枚舉值下的中文說明

GetValue 根據中文說明獲得對應的枚舉值 

QueryBuilder 查詢構造器類,主要是構造查詢條件,where後面的,使用方法類似StringBuilder。

Append 追加查詢條件

BeginBracket 添加一個左括號

EndBracket 添加一個右括號

下面是Configuration下的幾個類,主要提供連接串的存儲方式

AppConnectionConfig 連接串是存儲在App.setting文件中的

BinaryConnectionConfig 連接串是存儲在bin文件裡的,讀或寫的時候key取"a"...."h"。

RegConnectionConfig 連接串是存儲在注冊表裡的

SysXmlConnectionConfig 連接串是存儲在系統目錄裡的xml文件裡的

XmlConnectionConfig 連接串是存儲在任意位置的xml文件裡的

ConfigurationCreator 從配置文件裡創建實例,這裡相關的類還有:實例創建配置節-InstanceSettingsSection、實例創建配置集合-InstanceSettingsCollection、實例創建配置元素-InstanceSettings

它的工作過程如下:首先在在app.config裡配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="faibclass.data.instanceSection" type="FaibClass.Data.Configuration.InstanceSettingsSection, FaibClass.Data2" />
</configSections>
<faibclass.data.instanceSection>
<faibclass.data.instanceSettings defaultInstance="Access">
<!-- 使用連接串 -->
<add name="SqlServer" type="FaibClass.Data.SqlServer, FaibClass.Data2" connectionString="Data Source=.;Initial Catalog=CAITTM_BuyLine;User ID=sa" />
<!-- Access -->
<add name="Access" type="FaibClass.Data.OleDb, FaibClass.Data2" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={APP}\test.mdb" />
<!-- 使用Bin配置文件 -->
<add name="Sql2005" type="FaibClass.Data.SqlServer, FaibClass.Data2" interfaceType="FaibClass.Data.Configuration.BinaryConnectionConfig, FaibClass.Data2" interfaceParameters="{APP}\Connection.bin" interfaceKey="c" />
</faibclass.data.instanceSettings>
</faibclass.data.instanceSection>
</configuration>

這樣,DA裡就可以改成

using System;
using FaibClass.Data;
using FaibClass.Data.Configuration;
namespace Test
{
/// <summary>
/// DA操作類
/// </summary>
public class TB_BUY_BILL_DA : BaseDataAccess<TB_BUY_BILL, TB_BUY_BILLs>
{
public TB_BUY_BILL_DA() : base (ConfigurationCreator.CreateInstance())
{
}
}
}

好了,Data這個類就介紹到這裡了,相關的例子在以後的文章中會給出的,下一篇介紹一下Common.Windows類庫了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved