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

