我有一個數據庫,其中包含「小部件」,比方說。例如,小部件具有諸如「長度」和「寬度」等屬性。用於創建wdigets的原始低級API是一團糟,所以我正在編寫一個更高級別的函數集以使調用者更容易。數據庫很奇怪,我不能很好地控制創建widget對象的時間。具體來說,直到處理的後期階段,以及某些其他事情先發生之後才能創建。但是,我希望我的呼叫者認爲在早期階段已創建了一個窗口小部件對象,以便他們可以從一開始就獲取/設置其屬性。代理對象來模擬即將創建的數據庫
所以,我實現了一個「ProxyWidget」對象,我的呼叫者可以使用它。它具有private_Length和private_Width等私有字段,可以存儲所需的值。然後,它還具有公共屬性「長度」和「寬度」,以便我的呼叫者可以訪問。如果來電者告訴我設置Width屬性的值,該邏輯是:
- 如果相應的控件對象在數據庫中已存在,則設置 其Width屬性
- 如果不是,存儲給定寬度值在private_Width字段中供以後使用。
在稍後的階段,當我確信窗口小部件對象已經在數據庫中創建時,我複製所有值:從private_Width複製到數據庫寬度字段等等(一個字段/屬性不幸的是)。
這適用於一種類型的小部件。但是我有大約50種類型,每種類型都有大約20個不同的領域/屬性,這導致了難以維繫的混亂。我想知道是否有更聰明的方法。也許我可以使用反射來創建「代理」對象,並以通用的方式複製字段/屬性數據,而不是編寫大量的重複代碼?以某種方式分解通用代碼?我能從「數據綁定」模式學到什麼嗎?我是一名數學家,不是程序員,我有一種不安的感覺,我目前的方法很簡單。我的代碼是用C#編寫的。
當您在數據庫中創建窗口小部件時,您有任何通知?否則,你怎麼知道你什麼時候可以保存你的緩衝變化? – stakx
不是真的「通知」,但有一個功能,我可以打電話找出小部件是否存在於數據庫中,並且有一個時間點我確定它存在,甚至沒有問。在後面的時間點,我保存緩衝的數據。 – bubba