[問題] 抽象工廠方法請益...麻煩高手解答

作者: KSmart (經濟不景氣,好景不常在)   2016-01-16 21:44:47
最近看到一系列的工廠方法...想說直接以實作來了解。
但是,一些問題不是很清楚,周遭的朋友開發也沒管啥開發方式..
所以,轉而向網路上各位前輩指教,希望各位前輩指點一二。
我自己寫了一小段SampleCode,希望直接透過Code詢問會比較清楚@@
https://mega.nz/#!OIBElJ6a!_Mn1NldD2V-ZjosPEIRpcFEjW5QKZtzYNggyzu-PJBQ
主要的系統分為三塊,如圖: http://i.imgur.com/SyOOpsp.png
1.Form http://i.imgur.com/2GL7wkv.jpg
2.FactoryLib
http://i.imgur.com/WWPglb6.jpg
http://i.imgur.com/WYsyfqN.jpg
http://i.imgur.com/YNKL6WW.jpg
http://i.imgur.com/HYtzYtw.jpg
3.Log
1.最主要的Form,也是最單純的部分,只給User Keyin數值。所以,也就不引用Log.dll
2.將所有流程及處理作業都寫在此部分,因此FactoryLib會記錄Log,故引用Log.dll
3.當然就是自己寫的Log.dll 了(內容會是自己寫Log的方式...)
FactoryLib內有四個.cs
最上層為 ProcessFactory => 負責判斷需要呼叫哪個模組..
下一層為 ProcessProvide => 此為抽象Class
ProcessOfTainan => 繼承ProcessProvide 實作變數A*B
ProcessOfTaipei => 繼承ProcessProvide 實作變數A+B
問題一:
因為實際在處理作業流程的Class應該是 ProcessOfTainan 及 ProcessOfTaipei
所以,會在此New log 這個物件..
但是,Log所需要紀錄的位置,會從Form1傳入,請問我要怎麼寫會比較好??
問題二:
我有看過相關文章,如果使用Interface
可以透過反射,直接傳入Function Name,就可以呼叫該Function。
那如果使用抽象的方式呢?
問題三:
這樣的架構是否正確呢?
對於這種四層式(含Form)的方式不是很清楚,希望各位前輩指點@@
作者: Litfal (Litfal)   2016-01-16 21:54:00
1. LOG的話我會用.config去設定2. 有interface,call method應該就不用反射,抽象也是,反射應該是用來實現IoC,讓工廠建立並回傳適合的instance我這邊mega怪怪的專案還拉不下來,所以先以你的描述來回答
作者: YahooTaiwan (超可愛南西我老婆)   2016-01-18 05:50:00
1. Logger 實作 Singleton2. 看不懂問題3. 沒看到哪邊有四層式架構,但此架構沒問題
作者: Litfal (Litfal)   2016-01-18 10:19:00
所謂的工廠,是用來建立物件(instance)的,不是用來call某method的喔。(FactoryLib第一張圖)工廠建立出來的物件都要符合某一種規範,那規範就是介面或抽象類(其實不侷限於抽象類啦),並且在建立後回傳該介面以你的例子,就是要回傳ProcessProvide。呼叫端(Form)只相依於工廠與規範(ProcessProvide),而不須知道實作類(ProcessOfTainan及ProcessOfTaipei)的存在,以解除與眾多實作類的相依性呼叫端只需使用工廠建立instance,再依規範呼叫方法即可簡單的code會像這種感覺:ProcessProvide provider = factory.Create(arg);provider.CalcAB(...);

Links booklink

Contact Us: admin [ a t ] ucptt.com