我需要在一個由兩個主要部分組成的應用程序工作:在業務邏輯中使用反射是否是一種好的做法?
- 業務邏輯部分的具體業務類(如圖書,圖書館,作者,...)
- 通用部分,可在數據網格中顯示Books,Libraries,...,將它們映射到數據庫...)。
泛型部分使用反射來從業務類中獲取數據,而無需在業務類中編寫特定的數據網格或數據庫邏輯。這工作得很好,並允許我們無需調整數據網格和數據庫邏輯增加新的業務類(例如LibraryMember)。
但是,多年來,代碼被添加到業務類中,這些業務類還利用反射來完成業務類中的事情。例如。如果一本書的作者被改變,觀察家們打電話告訴作者本身,它應該本書添加到其收藏的由他(Author.Books)寫的書。在這些觀察員,不僅實例都過去了,而且還直接從反思中得到的信息(這樣,來電者知道,這本書領域的「作者」是改變字段信息添加到觀察者調用)。
我可以清楚地看到在這些通用模塊(如數據網格或數據庫接口)中使用反射的優點,但在我看來,在業務類中使用反射是一個壞主意。畢竟,應用程序不應該儘量不依賴反思工作?還是在21世紀反思「正常工作方式」?
是因爲你的業務邏輯使用反射好的做法呢?
編輯:一些澄清柯克的一句話:
- 試想一下,作者實現對圖書的觀察員。
- 書呼籲所有的觀察者只要書的某些領域改變(如名稱,年份#Pages,作者,...)。更改字段的'FieldInfo'在觀察者中傳遞。
- 的作者,然後觀察者使用該字段信息,以決定是否有興趣在這個變化。在這種情況下,如果FieldInfo用於Book的字段Author,則Author-Observer將更新其自己的Books矢量。
你說'FieldInfo'通過,但我沒有看到你解釋如何使用它。具體而言,(除了傳遞信息類,這是相對無害的)如何使用反射? – 2010-10-13 14:15:48
你使用它像INotifyPropertyChanged接口(通常在WPF應用程序中使用數據綁定)?在屬性設置時引發事件,使用屬性名稱? – 2010-10-13 14:42:56
@Amittai:不,這是一個相當自定義,使用反射的非常具體的實現。 – Patrick 2010-10-13 14:56:05