日期:2014-05-18  浏览次数:20833 次

分层开发中工厂方法设计模式的问题。
最近要用到工厂方法模式,产生了一个疑问。
首先我说说我的理解;
 
分层开发:是系统架构
工厂方法是局部设计模式。

问1:如果我分三层 UI\BLL\DAL 那么我每层都应用 工厂方法设计模式应该是正确的吧 ???


聊聊我现在系统面临的问题,Winfrom程序。

这是一个实验室 检验数据分析系统。 他分 A\B\C三个子系统,每个子系统有不同的界面,不同的业务及数据结构。
由于客户要求三个子系统集成在一个程序里,所以我现在的设想是 :

1主界面MDI窗体,

IUIBase (SysShowFrom(); SysMenus();SysToolButtons();.....这里定义好界面对象接口

AUI
BUI
CUI

IUIFactory (CreateUI) ....创建界面的工厂接口。

AUIFactory
BUIFactory
CUIFactory

三个系统的UI工厂。(工厂类依赖于界面类。这些工厂我会写在同一个DLL里面,利用插件实现的原理,遍历某个目录下指定DLL加载所有工厂,产生界面对象,并调用相关方法)。

问2:以上我的设计有什么问题没 ?欢迎大家作死的拍砖!


可能以上我表述的不是很专业,可只要大家能明白我的意思就好。 现在只有80分了,全给了。





------解决方案--------------------
如果考虑可扩展,考虑一下MEF
------解决方案--------------------
再进一步弱化依赖,就是IoC了。参考:

http://blog.csdn.net/fangxinggood/article/details/7203212
------解决方案--------------------
没必要每一层都用工厂,其实工厂模式很麻烦,不如用new简单,如果一个类没有抽象为接口,就不需要用工厂来创建,

而且有时候我觉得工厂还不如依赖注入简单,只是依赖注入需要用反射创建实例,效率可能低一些,

问题2的话,很少用工厂创建界面的,这样不太灵活,一般如果是MVC模式的话,最好用工厂创建Action类实例,让Action创建界面,

如果要把各个部分做成插件,建议还是用依赖注入,把类名甚至dll文件名写到xml配置文件中,反射创建实例,
------解决方案--------------------
反射,
------解决方案--------------------
你这样的对象SysShowFrom(); SysMenus();SysToolButtons();.....不少吧,是不是用继承窗体好点啊,先做个大家都需要的窗体,然后继承扩展。
------解决方案--------------------
微软的DI框架 Unity
非微软的DI框架 Ninject
------解决方案--------------------
http://download.csdn.net/download/zschuxin123/4093319
大话设计模式可以看下

------解决方案--------------------
探讨
最近要用到工厂方法模式,产生了一个疑问。
首先我说说我的理解;

分层开发:是系统架构
工厂方法是局部设计模式。

问1:如果我分三层 UI\BLL\DAL 那么我每层都应用 工厂方法设计模式应该是正确的吧 ???


聊聊我现在系统面临的问题,Winfrom程序。

这是一个实验室 检验数据分析系统。 他分 A\B\C三个子系统,每个子系统有不同的界面,不同的业务及……