天天看點

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

前言:

本篇将使用2.n系列版本,在不改動原來留言版系統一行代碼的情況下,實作其資料庫記錄檔功能。

正文步驟:

一:建表

1:增加一個日志操作表[actionlogs],這個少不了,表結構如下:

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

2:建立表的資料庫腳本如下:

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

建立actionlogs表

二:建類庫項目獨立實作記錄檔

1:建立一個項目類庫起名就叫:aoplog,同時添加對cyq.data.dll的引用[2.n系列版本]

2:建立一個類,繼承自cyq.data.aop.iaop接口,并實作之如:

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)
CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

    public class aoplog : iaop

    {

        #region iaop 成員

         public void begin(aopenum action, string objname, params object[] aopinfo)

        {

            //這裡先沒用到,用于權限判斷

        }

        public void end(aopenum action, bool success, object id, params object[] aopinfo)

            //這裡等會要實作

        public iaop getfromconfig()

            return null;//預設這樣就行了

        public void onerror(string msg)

            //這裡先沒用到,資料庫操作異常時引發

        #endregion

    }

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

3:我們将具體實作分流到另一個類處理:建立類:actionlog.cs,并預先留下方法接口:

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)
CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

public class actionlog

{

    public void writefill(object id)

    public void writeinsert(object id)

    {    

    #region 其它方法

     private int getuserid()

    private void write(object id, string msg)

    {   

    private bool containurl(string key)

    {     

    #endregion

}

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

4:回到aoplog實作方法

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

aoplog 實作 隻是添加了一個構造函數和實作end方法

5:實作actionlog方法

a:從session擷取使用者id

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)
CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

       private int getuserid()

            int id=0;

            if (httpcontext.current.session["id"] != null)

            {

                int.tryparse(convert.tostring(httpcontext.current.session["id"]), out id);

            }

            return id;

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

b:插入表資料方法封裝

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)
CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

        private void write(object id,string msg)

            int userid = getuserid();

            if (userid == 0)

                int.tryparse(convert.tostring(id), out userid);

            if (userid > 0)

                maction action = new maction(tablenames.actionlogs);

                action.setnoaop();//寫日志時,注意關掉aop功能。

                action.set(actionlogs.userid, userid);

                action.set(actionlogs.msg, msg);

                action.insert();

                action.close();

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

c:檢測url是否包含指定字元

        private bool containurl(string key)

            return system.web.httpcontext.current.request.url.tostring().tolower().contains(key);

d:實作登陸日志記錄

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

        public void writefill(object id)

            if (containurl("login.aspx"))

                write(id,"登陸成功!");

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

e:實作注冊日志與留言日志記錄

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)
CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

        public void writeinsert(object id)

            if (containurl("reg.aspx"))

                write(id,"注冊成功!");

            else

                write(id,string.format("添加一行留言[id={0}]!",id));//需要啟用更多分支時,請使用"params object[] aopinfo資訊[這個需要修改界面參數代碼]"

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

三:切入原有留言版系統

1:将類庫生成的aoplog.dll放到留言系統的bin目錄下

2:更新原來cyq.data.dll的1.2版本到最新版本。[完全相容,直接涵蓋更新]

3:配置檔案appsettings項增加一行配置:<add key="aop" value="aoplog,aoplog.aoplog"/>

四:運作結果

1:操作登陸、注冊、留言!!!資料庫記錄結果如下圖:

CYQ.Data 輕量資料層之路 應用示例三 Aop切入留言系統--記錄檔(二十七)

五:示例下載下傳

版權聲明:本文原創發表于部落格園,作者為路過秋天,原文連結:

http://www.cnblogs.com/cyq1162/archive/2010/10/08/1845708.html