您好,登錄后才能下訂單哦!
最近在寫一個Delphi程序,想到一個問題,即Delphi為了方便使用的需要,自動創建了所有的窗體,并將這些窗體變量自動聲明為全局變量。想了一下,這會帶來一些問題:
1、窗體聲明為全局變量,可以隨時隨地可用,但也同時意味著,隨時會被修改和調用,調用關系復雜,且難以被追蹤。
2、不符合面對向象的要求。由于窗體全局變量的存在,在各個類的方法實現中,涉及到其它窗體時,代碼都是類似于 frmMain.XXX 、 frmAddInstance.XXX ,使用窗體變量進行直接調用。但這樣是不合理的,一個類的方法實現,直接調用的是某一個具體對象的方法,而不是通過創建、組合、繼續的方式來實現代碼,不符合面對對象的精神。
如:TForm1的OnClick方法里,經常看到開發人員這樣寫:
procedure TForm1.OnClick(Sender:TObject);
begin
form1.Caption := 'abc';
form2.Visable := not form2.Visable;
end;
這里在一個類的實現方法里直接使用了form1這個全局窗體變量,雖然運行沒有問題,但如果TForm1創建了第二個實例呢,點擊第二個實例的窗體時,它的標題根本不會變,但是第一個實例反而改變了。這樣的代碼肯定是可笑的。如果亡羊補牢,應該把from1改為self。這里對form2的引用也是類似,代碼實現引用了具體的全局實例而不是由自己創建或控制的對象,是不合理的。
Delphi的機制難以改變,暫時可以將每個窗體的全局變量看作是單例變量來使用,即不要嘗試去創建窗體的第二個實例。
3、Delphi創建的數據模塊,上面的組件全部都是可見的,雖然操作方便,但很容易引導開發人員直接去操作組件。更合理的方式是將這些操作封裝為模塊公開的方法,每個方法實現特定的業務邏輯,其它窗體通過這些方法(即廣義上的模塊接口)去操作,而不是直接操作組件,從而達到解耦的目的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。