AOP現(xiàn)在很火,網(wǎng)上有這許多支持AOP的框架,對于Delphi來說同樣也有MeAOP。不過覺得這些框架太復雜了。
現(xiàn)在有一個系統(tǒng),基本上都快結(jié)束了,整體上當然是沒有采用什么AOP的框架。對于這樣的系統(tǒng)能否用上AOP的一點點好處呢?
項目組提出在現(xiàn)有的系統(tǒng)上加入日志記錄的需求。大家一起來看看我是怎么來實現(xiàn)這個功能的吧。
AOP簡要說明
根據(jù)網(wǎng)上對AOP的解釋,它具有下面的特征:
1、將通用功能從不相關(guān)類之中分離出來;
2、能夠使得很多類共享一個功能,一旦功能發(fā)生變化,不必修改很多類,只要修改這個功能就可以了。
AOP的核心在于保持橫切關(guān)注點的分離。
日志功能
這是一個比較典型的MIS系統(tǒng),現(xiàn)在編碼基本結(jié)束。不過某個開發(fā)人員接到了一個繁瑣又看上去沒什么技術(shù)含量的任務(wù)——實現(xiàn)日志功能。這個開發(fā)者就是本人了。
雖然沒什么難度,但還是設(shè)計一下吧,誰讓我是一個自詡為高水平的程序員呢。
一個設(shè)計圖就這么做出來了。其中設(shè)計一個接口ILog來封裝日志實現(xiàn)的細節(jié)。模塊甲乙丙只需要使用接口ILog就可以。滿足了XXX面向?qū)ο蟮脑O(shè)計原則。太完美了!
泡杯茶,然后開始寫代碼實現(xiàn)這個簡單而龐大的任務(wù)。
開始編碼了!
TLog,ILog實現(xiàn)比較簡單,在此略去不談。稍微修改一下以前模塊的代碼,將ILog接口傳入每一個模塊中。
接下來只需要實現(xiàn)日志功能的調(diào)用就可以了。
模塊甲:
procedure TModule1.acAction1Execute(Sender: TObject);
begin
……
Flog.LogCommand(“模塊甲 操作一”);
end;
procedure TModule1.acAction2Execute(Sender: TObject);
begin
……
Flog.LogCommand(“模塊甲 操作二”);
end;
模塊乙:
procedure TModule2.acAction1Execute(Sender: TObject);
begin
……
Flog.LogCommand(“模塊乙 操作一”);
end;
現(xiàn)在有一個系統(tǒng),基本上都快結(jié)束了,整體上當然是沒有采用什么AOP的框架。對于這樣的系統(tǒng)能否用上AOP的一點點好處呢?
項目組提出在現(xiàn)有的系統(tǒng)上加入日志記錄的需求。大家一起來看看我是怎么來實現(xiàn)這個功能的吧。
AOP簡要說明
根據(jù)網(wǎng)上對AOP的解釋,它具有下面的特征:
1、將通用功能從不相關(guān)類之中分離出來;
2、能夠使得很多類共享一個功能,一旦功能發(fā)生變化,不必修改很多類,只要修改這個功能就可以了。
AOP的核心在于保持橫切關(guān)注點的分離。
日志功能
這是一個比較典型的MIS系統(tǒng),現(xiàn)在編碼基本結(jié)束。不過某個開發(fā)人員接到了一個繁瑣又看上去沒什么技術(shù)含量的任務(wù)——實現(xiàn)日志功能。這個開發(fā)者就是本人了。
雖然沒什么難度,但還是設(shè)計一下吧,誰讓我是一個自詡為高水平的程序員呢。
一個設(shè)計圖就這么做出來了。其中設(shè)計一個接口ILog來封裝日志實現(xiàn)的細節(jié)。模塊甲乙丙只需要使用接口ILog就可以。滿足了XXX面向?qū)ο蟮脑O(shè)計原則。太完美了!
泡杯茶,然后開始寫代碼實現(xiàn)這個簡單而龐大的任務(wù)。
開始編碼了!
TLog,ILog實現(xiàn)比較簡單,在此略去不談。稍微修改一下以前模塊的代碼,將ILog接口傳入每一個模塊中。
接下來只需要實現(xiàn)日志功能的調(diào)用就可以了。
模塊甲:
procedure TModule1.acAction1Execute(Sender: TObject);
begin
……
Flog.LogCommand(“模塊甲 操作一”);
end;
procedure TModule1.acAction2Execute(Sender: TObject);
begin
……
Flog.LogCommand(“模塊甲 操作二”);
end;
模塊乙:
procedure TModule2.acAction1Execute(Sender: TObject);
begin
……
Flog.LogCommand(“模塊乙 操作一”);
end;

