【SQL开源代码栏目提醒】:网学会员为需要SQL开源代码的朋友们搜集整理了讲解三层结构和抽象工厂模式的技巧 doc - 讲义教程相关资料,希望对各位网友有所帮助!
讲解三层结构和抽象工厂模式的技巧 2010-12-24 12:54:11 大多少教员讲解抽象工厂的设计模式学员无法理解因为这个知识正如它的名字“抽象工厂”一样难于理解导致很多教员反馈回来授课效果不好那么如何讲解好这个知识点呢我在实际的授课过程中总结了讲解这个难点的方法和演示技巧总结出来与大家共享。
这里我们结合课件采用案例演示教学法层层深入大约需要三次课把这个难点讲解完成。
第一次课程讲解简单三层授课技巧具体思路是先准备好一层即不采用分层实现的
代码在一层的基础上实现两层再在两层的基础上实现三层最后引入Model层。
首先给学员演示案例“用户登陆窗体”对于一层如何实现用户登陆功能这个
代码大家非常熟悉我不多讲解如下图所示 图一 提取方法 在这个层的
代码中提取方法具体操作是选中
代码右键选择重构下的提取方法这里注意不要选择用户名和用户密码这里我们就提取到了有两个参数的方法。
我们不能发现选择的
代码都是针对数据操作的为了更好的重复使用这段
代码我们一般把它放到哪里呢引出数据访问层DAL。
这里在VS2005中演示
代码填写新的类库即数据访问层类库DAL将刚刚提取的方法从表示层剪切到DAL中。
再在表示层添加对DAL层的引用在按钮的Click事件中调用这个方法我们就实现了从一层到两层的转变从而实现了最简单的两层结构。
在实际的开发中具体项目的业务逻辑往往比较复杂需要写一些方法实现这些复杂的逻辑为了重用这些
代码我们把它放到表示层和数据访问层中间称为业务逻辑层。
下面在前面
代码的基础上演示三层的实现首先添加一个新的类库即业务逻辑层BLL然后在BLL层添加具体的方法引用DAL层的方法最后在表示层中首先删除对数据访问层的引用再添加BLL层的引用更改按钮的Click的
代码为引用BLL层的方法。
这样三层结构就实现了。
上面的
代码我们实现的判断登陆的用户名称和密码是否正确是一个查询功能查询传递两个参数这么实现是可以的但是我们往往需要对大批量的数据进行添加和修改操作如用户信息的注册注册的信息可能有十几项你如何在层与层直接传递数据呢显然使用带十几个参数的方法是比较麻烦的在这里我们使用类的属性来传递每次传递一个对象这里我们称之为Model层。
具体的实现方法添加新的类库建立实体类再依次将需要传递的参数作为属性添加到实体类中。
最后添加引用因为作为数据传递所以每个层多要引入Model层。
通过三层结构的演示目的让学员感觉三层结构很简单激发学习的热情和兴趣让学员喜欢编程序乐于编程序先入门了体会如何实现分层操作以后彻底理解了再深入学习再体会使用分层的好处。
具体的讲解过程如图二所示 图二 简单三层的实现 简单的三层结构学员很好理解对于抽象工厂的讲解我们依然是要循循善诱深入浅出层层深入的讲解。
具体的思路讲解首先让学员明白引入接口的原因再讲解使用简单工厂的便利最后讲解使用抽象工厂是锦上添花。
第二次课程讲解接口的引入和简单工厂为什么要使用接口呢现在的软件产品不可能指针对一个数据库如劳资管理系统大公司使用
SQL Server小公司可能使用Access就够用了那么如何让一套程序既可使用
SQL Server又可使用Access作为数据库呢答案是我们在数据访问层使用统一的接口让访问
SQL Server和Access的类都实现这个接口然后通过接口调用具体的实现。
具体的演示方法是在前面
代码的基础上点击DAL层的类右键选择重构选择提取接口这样一个接口就出现了。
如下图所示 图三 提取接口 我们这里为了更加的规范建立一个接口层的类库IDAL将这个接口移到这个类库IDAL中。
接口建立以后为了可以使用Access库我们添加新的数据层AccessDAL再添加一个AccessUserDAL类并实现现刚刚创建的接口。
为了方便演示有一个技巧你可以复制上面的
代码和SqlHelp到AccessDAL类库中然后将这个类库下的“
Sql”替换成“OleDb”。
这里注意SqlHelp里的
代码也要替换成访问Oledb的。
最后修改BLL层的调用方式为接口调用用接口隐示的声明用类显示的实现调用对于访问SQLServer数据库具体的
代码是ISqlUserDAL dal new Demo.DAL.SqlUserDAL如果需要访问Access库稍加改动就变成访问Access库具体
代码是ISqlUserDAL dal new Demo.AccessDAL.AccessUserDAL 接口就可以实现访问不同的数据库我们为什么采用工厂模式呢原因有两个第一是客户提出新需求自己不改变源码就更换为其他数据库第二是从开发公司考虑为了适应不同的数据库每次需要修改BLL层源
代码再编译程序发布程序比较麻烦。
那么具体实现步骤是创建新的工厂项目类添加类SimpleFactory然后在类中实现返回实现产品接口的方法通过Web.Config读取配置数据针对不同数据库返回不同实现接口的对象最后修改BLL层的调用方式为简单工厂调用用接口隐示声明但是实现通过工厂创建
代码如下:private static IUserInfo db SimpleFactory.CreateDalUserInfoInstance这样我们就可以通过修改配置文件实现不同数据库的访问实现了简单工厂的设计模式。
第三次课程讲解抽象工厂的实现有了简单工厂为什么还要使用抽象工厂呢原因是一个大的软件项目中包括很多的模块不同的模块就要创建不同的接口那么如何返回很多实现接口的对象呢 在简单工厂模式中只能编写多块相似的
代码通过判断数据库的类型返回具体的对象这样就造成大量的
代码冗余这里采用优化的方法即抽象公共的部分通过抽象类调用具体的实现类可以产生一批有关联的产品例如通过配置文件读取是Access数据库类型那么得到是Access的工厂工厂里的产品都是通过访问Access数据库数据产生的产品。
可以说对于简单工厂模式一次只能创建一个对象而对于抽象工厂模式实现一次创建一系列相互依赖对象的需求。
具体的演示实现步骤是首先通过修改前面的编写的简单工厂simpleFactory类为抽象工厂类添加相应的抽象方法通过读取对应的配置文件返回实现抽象类的工厂然后创建一个具体工厂类SQLFactory继承这个抽象工厂类重写抽象方法只返回具体SQLServer库的实现最后创建新的Access具体工厂类添加类AccessFactory让它也继承抽象工厂类重写抽象方法。
另外不要忘记修改BLL层的调用方式为抽象工厂调用具体的
代码是先得到一个工厂然后再得到相应产品。
具体的
代码是 private static AbsDALFactory factory AbsDALFactory.ChooseFactory private static IUserInfo db factory.CreateDalUserInfoInstance 这样我们就将数据访问层的内容进行了细化首先引入接口再使用简单工厂然后引入抽象工厂模式通过演示让学员明白为什么要使用简单工厂和抽象工厂以及如何使用它。
具体的讲解思路如下图三所示 图四 细化数据访问层 这里我们演示完成后学员还无法透彻地理解抽象工厂模式下面共享一个生活案例给大家通过案例剖析抽象工厂的实现方式首先看下图图五 图五抽象工厂一 客户是什么这里我们说的客户是指调用者具体而言如网站的美工设计人员那么地图是什么呢指配置文件快餐点比喻我们的抽象工厂汉堡和鸡腿比喻抽象产品客户即调用者只知道这些具体的哪个快餐店如何制作什么汉堡客户并不关心只要能到最方便的快餐店吃到汉堡填饱肚子即可。
具体的工厂是肯德基和麦当劳具体产品是KFC的汉堡、KFC鸡腿他们这一组是相关的另外一组是McDonald汉堡、McDonald鸡腿他们两个是相关的是可以左手拿着McDonald汉堡右手拿着McDonald鸡腿狼吞虎咽的我们把相关的产品称为一系列的产品你还想吃薯条稍微扩展一下加一个薯条的产品包括抽象薯条和具体的薯条。
如下图六所示蓝色框图中的肯德基的汉堡、鸡腿和薯条是相关的一系列的由此可以看出抽象工厂设计模式给客户提供的不再是单一的产品而是提供一批系列的产品。
图六抽象工厂二 通过层层深入的
代码演示再结合生活案例来理解抽象工厂希望大家能够掌握简单三层到抽象工厂的讲解技巧在实际的授课中深入浅出、步步为营熟练地进行
代码演示让学员彻底理解并会使用抽象工厂设计模式。