实例创建要通过工厂,这个已经达成一致的.没有问题.
关于BLL如果引用IDAL,你的做法也是正确的(从运行的角度)完全没有问题,
我们讨论的,应该是如何引用的问题.这是OOD中一点细微的差别,如果探究,就是一个"代码的感觉舒服不舒服"的话题.
下面继续讨论:
private IDAL.IDAL机构 idal机构 = null;
private IDAL.IDAL员工 idal员工 = null;
..................
这种写法呢,是一个BLL类维护N个引用.哪天增加一个IDALXXXX,那末,所有需要使用IDALXXXX的BLL类都要改代码,以增加一个引用.
示意: 1个BLL->N个具体产品
我们上课时讲的,
是一个BLL只引用 一个DataProvider(也就是一个抽象工厂的引用).由这个抽象工厂的实例(DefaultProvider)提供N个具体IDAL的实例..哪天增加一个IDALXXXX,只需要在工厂的定义中添加一个成员(具体工厂实现也加该成员),所有持有工厂引用 的BLL就自然获得了IDALXXX.
示意: 1个BLL ->一个工厂实例 ->N个具体产品.
其实你也意识到了你的那种设计有点"不灵活"吧,所以你说再增加一个Util工具类.
但你仔细品味一下,这个Util类,其实就是充当了工厂的角色,也就是说,本质上Util类,就是一个简单工厂的应用.