[问题] 抽象工厂方法请益...麻烦高手解答

楼主: 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