Git.Framework 框架隨手記--准備工作


  前面已經提到過了本框架的由來,時至今日該框架已經和最初版本有了天壤之別。因為仍有部分代碼是采用原有的框架,所以本框架也算不上原創,只是在原有的基礎上不斷的改進,所以希望了解此框架的人不要過多的指責。

  一. 配置數據庫連接

    在該框架中自定義了一個配置文件Database.config, 這個配置文件的根節點為<databaseList></databaseList>, 其可以包含多個子節點用於配置數據庫的配置連接,具體代碼如下:

<?xml version="1.0" encoding="utf-8" ?>
<databaseList>
  <database name="JooShowGit">
    <connectionString>Server=127.0.0.1;database=JooShowGit;user id=sa;Password=000000</connectionString>
  </database>
</databaseList>

    該配置文件可以包含多個<database></database>的節點,該配置文件可以通過反序列化的形式轉化為一個集合對象,最終可以通過database的name熟悉來獲取一個數據庫的Connection對象. 但是這里得注意一下,如果配置了多個數據庫的連接,只能配置一種類型的數據庫,比如MSSQL,Oracle,MySQL,Sqlite 等,不能配置混合的數據庫連接,這里是有待改進的部分。在原有的框架中 name="JooShowGit(自定義)" 只是一個唯一標識符,在系統中查找的時候更加方便,但是改進之后可以用於關聯實體與數據庫連接的關系。

 

  二. 如何加載配置文件

    配置好如上的的數據庫連接之后,我們並不是自己去讀取配置然后創建連接,我們需要在web.config 或者app.config文件中配置如下代碼:

<appSettings>
    <add key="DatabaseListFile" value="/Configs/Data/Database.config"/>
    <add key="DataCommandFile" value="/Configs/Data/DbCommandFiles.config"/>
</appSettings>

    這段代碼告訴我們從何處去加載配置文件,DatabaseListFile 指定了數據連接配置文件的地址,在應用程序啟動之后會自動尋找這個地址加載該配置到緩存,內部實現是通過反序列化為對象集合,緩存的是對象數據。

 

  三. Command 配置文件

    我們都知道在.NET數據庫連接操作的時候都有一個command對象,用於執行命令。在框架中所有的SQL語句都配置在配置文件中,之前文章也提到過,我是非常反感這種配置的,這里為了從基礎部分講到使用以及改造過程,這里還是先介紹一下其作用。

<?xml version="1.0" encoding="utf-8" ?>
<dataOperations>

  <!--User_Base所有字段的修改-->
  <dataCommand name="User.UpdateAllBase" database="JooShowGit" commandType="Text">
    <commandText>
      <![CDATA[
       UPDATE [User]
       SET [UserName] = @UserName
          ,[Email] = @Email
          ,[Password] = @Password
          ,[RegisterDate] = @RegisterDate
          ,[RegisterIp] = @RegisterIp
          ,[Status] = @Status
          ,[RegisterApplicationID] = @RegisterApplicationID
          ,[ActiveDate] = @ActiveDate
          ,[LastLoginDate] = @LastLoginDate
          ,[LastLoginApplicationID] = @LastLoginApplicationID
          ,[RegisterSource] = @RegisterSource
          ,[AuditStatus] = @AuditStatus
          ,[IsLogin] = @IsLogin
          ,[LoginCount] = @LoginCount
          ,[LastLoginIp] = @LastLoginIp
          ,[AuditUser] = @AuditUser
          ,[AuditDate] = @AuditDate
          ,[IsDeleted] = @IsDeleted
          ,[OLDApplicationID] = @OLDApplicationID
          ,[OLDID] = @OLDID
          ,[RowGuid] = @RowGuid
          ,[IMNum] = @IMNum
          ,[Phone] = @Phone
          ,[IsEmailValidate] = @IsEmailValidate
          ,[IsPhoneValidate] = @IsPhoneValidate
          ,[StepNum] = @StepNum
          ,[SaleCode]=@SaleCode
          ,[PasswordIM]=PasswordIM
          ,[ActiveIP]=@ActiveIP
          ,[CompanyType]=@CompanyType
            Where UserId=@UserId
        ]]>
    </commandText>
    <parameters>
      <param name="@UserId" dbType="Int32" direction="Input"/>
      <param name="@UserName" dbType="String" direction="Input"/>
      <param name="@Email" dbType="String" direction="Input"/>
      <param name="@Password" dbType="String" direction="Input"/>
      <param name="@RegisterDate" dbType="DateTime" direction="Input"/>
      <param name="@RegisterIp" dbType="String" direction="Input"/>
      <param name="@Status" dbType="Int32" direction="Input"/>
      <param name="@RegisterApplicationID" dbType="Int32" direction="Input"/>
      <param name="@ActiveDate" dbType="DateTime" direction="Input"/>
      <param name="@LastLoginDate" dbType="DateTime" direction="Input"/>
      <param name="@LastLoginApplicationID" dbType="Int32" direction="Input"/>
      <param name="@RegisterSource" dbType="Int32" direction="Input"/>
      <param name="@AuditStatus" dbType="Int32" direction="Input"/>
      <param name="@IsLogin" dbType="Int16" direction="Input"/>
      <param name="@LoginCount" dbType="Int32" direction="Input"/>
      <param name="@LastLoginIp" dbType="String" direction="Input"/>
      <param name="@AuditUser" dbType="String" direction="Input"/>
      <param name="@AuditDate" dbType="DateTime" direction="Input"/>
      <param name="@IsDeleted" dbType="Int16" direction="Input"/>
      <param name="@OLDApplicationID" dbType="Int32" direction="Input"/>
      <param name="@OLDID" dbType="Int32" direction="Input"/>
      <param name="@RowGuid" dbType="String" direction="Input"/>
      <param name="@IMNum" dbType="String" direction="Input"/>
      <param name="@Phone" dbType="String" direction="Input"/>
      <param name="@IsEmailValidate" dbType="Int32" direction="Input"/>
      <param name="@IsPhoneValidate" dbType="Int32" direction="Input"/>
      <param name="@StepNum" dbType="Int32" direction="Input"/>
      <param name="@SaleCode" dbType="String" direction="Input"/>
      <param name="@PasswordIM" dbType="String" direction="Input"/>
      <param name="@ActiveIP" dbType="String" direction="Input"/>
      <param name="@CompanyType" dbType="Int32" direction="Input"/>
    </parameters>
  </dataCommand>


</dataOperations>
Command配置文件

    從以上配置項的代碼應該都應該明白,其實就是講ADO.NET中的SQL語句以及參數配置到了這個配置文件中。每一個操作語句就要配置一個dataCommand節點,最終這個配置文件也是通過反序列化轉化為List集合對象了。在最底層其實是將以上內容轉化為了為了一個Command對象,在使用的時候只需要獲取Command對象就可以直接操作數據了。

    name 節點屬性在全局是唯一的,不能重復.

    database 指向Database.config配置文件中的name節點屬性值,用於設置連接的數據庫。

    commandType 用於指定執行的語句是SQL語句還是存儲過程

    commandText 用於指定執行命令的語句

    parameters 指定占位符參數

 

  四. Command配置文件管理

    DbCommandFiles.config 文件使用於管理Command配置文件的,將Command配置文件添加到這個文件中,系統在啟動的時候會默認將Command配置文件加載到緩存中,轉化為Command對象。

<?xml version="1.0" encoding="utf-8" ?>
<dataCommandFiles>
  <file name="DbVnPageRequestCommand.config"/>
</dataCommandFiles>  

    這個文件的根節點為dataCommandFiles,其子節點為執行的Command配置文件,如果在系統中編寫了N多個Command配置文件,但是沒有配置到這個配置文件中,系統是不會加載該配置文件的,所以需要特別的注意。    

 

  五. 日志管理配置

    在原有的系統中是沒有日志記錄的[帶有日志功能但是全部屏蔽,使用的是windows日志],自己重新開發了一個日志模板,其功能和log4net比較相似,但是沒有其強大,具體怎么使用log4net查看文章<Log4Net 全方位跟蹤程序運行>.  

    日志使用必須要在app.config或者web.config配置文件中配置,具體配置項如下(如何實現后面再說):

<appSettings>
    <add key="DatabaseListFile" value="/Configs/Data/Database.config"/>
    <add key="DataCommandFile" value="/Configs/Data/DbCommandFiles.config"/>
    <add key="CacheConfig" value="\Configs\Cache\cache.config"/>
    <add key="console" value="true"/>
    <add key="file" value="true"/>
    <add key="level" value="info"/>
    <add key="logpath" value="\Log\"/>
    <add key="logtype" value="Daily"/>
</appSettings>

    console 項指定是否在控制台輸出日志

    file 是否在log文件中記錄日志

    level 用於記錄日志的級別

    logpath 日志文件的記錄路徑

      logtype 日志文件的生產模式,1天,1周,1月,1年等

 

  六. 簡單的測試案例

    這里簡單的貼一段代碼演示如何使用,后面具體詳細描述:

DataCommand command = DataCommandManager.GetDataCommand("User.UpdateAllBase");
command.SetParameterValue(":username","222");
command.SetParameterValue(":usergorup", "222");
command.SetParameterValue(":userlevel", 2);
int line = command.ExecuteNonQuery();

    從以上代碼可以看出,這里的使用已經比ADO.NET簡單了很多,而且Command對象都是直接使用clone方式得到的,在操作的過程中沒有連接,關閉等操作,只需要指定相應的參數即可。

 

    由於今日時間有限,文章比較粗鄙,就此完結,具體改進過程后面會一一詳述.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM