2012-02-02 44 views
0

我們有一些表域類型值,即客戶類型,操作類型等。DB表作爲出廠配置

它的建成,如:TYPEID,顯示,...

這樣的網絡應用程序可以向用戶顯示Display並將ID發送到服務器端代碼,在那裏它可以與枚舉相關或發送到工廠以便通過ID創建實例。

我想添加一個信息列來創建類型(即它的類型,如果程序集被加載),以便激活器可以創建實例,這樣我可以將配置縮小到上表。

加上列之前,我必須定義代碼的類型明確,以及像這樣:

Factory.Register(id, typeof(MyClass)); 

,如果我將添加列我可以使它:

Factory.Register(id, Type.GetType(StringValueFromDB)); 

是在這一刻工作好嗎,所以我的問題是:

它是遵循好原則嗎?

它有什麼樣的缺陷嗎?

順便說一句,每個工廠是提到here

+0

http://programmers.stackexchange.com/questions/132971/factory-design-pattern-getting-the-types-from-a-table – 2012-02-02 17:31:29

回答

1

您是否確實需要在表格中存儲類型名稱?據我所知,TypeID與您的代碼庫中的Type有很強的聯繫,Factory.Register(id, typeof(MyClass));定義得很好。

如果您想在表格中存儲類型名稱,例如即時更改實施的能力,那麼您的方法可能會有用。但個人而言,我認爲這是沒有必要的,因爲您可能需要對其餘代碼進行更改以適應您所做的任何類型更改。

+0

如果我需要更改ID,我只需要在一個地方更改它,再加上我可以從不同的程序集中添加類型,如果我加載它,儘管我懷疑我會這樣做。你會說這是不需要的嗎? – Mithir 2012-02-02 17:33:08

+0

我不會說這是沒有必要的,特別是如果你正在嘗試創建一個可以使這種方法更容易管理的插件架構。我只是說你應該考慮一下你是否需要這樣做。根據我的經驗,通常會出現一個新要求,即不適合這種模式,這可能意味着您以後需要更多的工作。它試圖找到關鍵的正確平衡點。 – 2012-02-03 09:13:36

0

那豈不是更優雅有你的類型,如[ID(「someId」)的屬性,以便它可以被發現的通用工廠無需致電Factory.Register?

PS。我會張貼它作爲評論,但我沒有聲望呢。

+0

我不確定你的意思...你能否詳細說明? – Mithir 2012-02-02 11:39:57