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

看板C_Sharp (C#)作者 (經濟不景氣,好景不常在)時間9年前 (2016/01/16 21:44), 9年前編輯推噓3(3016)
留言19則, 2人參與, 最新討論串1/1
最近看到一系列的工廠方法...想說直接以實作來了解。 但是,一些問題不是很清楚,周遭的朋友開發也沒管啥開發方式.. 所以,轉而向網路上各位前輩指教,希望各位前輩指點一二。 我自己寫了一小段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)的方式不是很清楚,希望各位前輩指點@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.239.187.103 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1452951892.A.38A.html

01/16 21:54, , 1F
1. LOG的話我會用.config去設定
01/16 21:54, 1F

01/16 21:55, , 2F
2. 有interface,call method應該就不用反射,抽象也是,
01/16 21:55, 2F

01/16 21:57, , 3F
反射應該是用來實現IoC,讓工廠建立並回傳適合的instance
01/16 21:57, 3F

01/16 21:58, , 4F
我這邊mega怪怪的專案還拉不下來,所以先以你的描述來回答
01/16 21:58, 4F
附上圖片了,再麻煩各位前輩指點... ※ 編輯: KSmart (114.39.104.214), 01/18/2016 00:05:47

01/18 05:50, , 5F
1. Logger 實作 Singleton
01/18 05:50, 5F

01/18 05:52, , 6F
2. 看不懂問題
01/18 05:52, 6F

01/18 05:53, , 7F
3. 沒看到哪邊有四層式架構,但此架構沒問題
01/18 05:53, 7F

01/18 10:19, , 8F
所謂的工廠,是用來建立物件(instance)的,不是用來call某
01/18 10:19, 8F

01/18 10:20, , 9F
method的喔。(FactoryLib第一張圖)
01/18 10:20, 9F

01/18 10:21, , 10F
工廠建立出來的物件都要符合某一種規範,那規範就是介面或
01/18 10:21, 10F

01/18 10:22, , 11F
抽象類(其實不侷限於抽象類啦),並且在建立後回傳該介面
01/18 10:22, 11F

01/18 10:22, , 12F
以你的例子,就是要回傳ProcessProvide。
01/18 10:22, 12F

01/18 10:33, , 13F
呼叫端(Form)只相依於工廠與規範(ProcessProvide),而不須
01/18 10:33, 13F

01/18 10:34, , 14F
知道實作類(ProcessOfTainan及ProcessOfTaipei)的存在,以
01/18 10:34, 14F

01/18 10:34, , 15F
解除與眾多實作類的相依性
01/18 10:34, 15F

01/18 10:39, , 16F
呼叫端只需使用工廠建立instance,再依規範呼叫方法即可
01/18 10:39, 16F

01/18 10:39, , 17F
簡單的code會像這種感覺:
01/18 10:39, 17F

01/18 10:40, , 18F
ProcessProvide provider = factory.Create(arg);
01/18 10:40, 18F

01/18 10:41, , 19F
provider.CalcAB(...);
01/18 10:41, 19F
文章代碼(AID): #1McabKEA (C_Sharp)
文章代碼(AID): #1McabKEA (C_Sharp)