Oracle培训:抽象工厂中加入Oracle
Oracle培训:抽象工厂中加入Oracle,在设计模式中介绍过抽象工厂设计模式(Abstract Factory),抽象工厂有四种关键角色:抽象工厂、实体工厂、抽象产品、实体产品。抽象工厂模式实现原理强调的是对象组合机制,由在“父工厂”内定义不同的“子工厂”对象来负责不同的目标对象的创建,也就是说利用实体产品由抽象产品来约束,而由实体工厂来创建,实体工厂则由抽象工厂约束,可以有效的发挥工厂模式管理清晰的优点。
案例2:采用抽象工厂模式实现在学员信息管理系统中支持Access、SQLServer以及Oracle三套数据库的切换(以学员基本信息模块为例),以学员基本信息模块为例给出概要的实现,并实现展示所有学生信息功能。
案例分析:本例是抽象工厂课堂案例的延续,需要在项目中多添加一个Oracle数据库,实体产品是数据访问对象,三套数据库相当于有三套数据库访问对象,通过三个实体工厂管理三套数据库访问对象,最后使用抽象工厂管理三个实体工厂。
实现步骤:
1. 在Oracle数据库中使用Sql语句新建Infos表,并添加约束和表数据,如图3所示:
图3 Student表数据
2. 在VS2008中创建空白解决方案,命名为Test.sln。
3. 在解决方案中添加表示层,并添加StudentList.aspx页面。
4. 在解决方案中添加模型层,根据上面的表结构新建Student.cs实体类。
代码演示:Student类
public class Student { string stuID;
public string StuID { get { return stuID; } set { stuID = value; } }
/** * 其他成员… … */ } |
5. 在解决方案中添加数据访问层IDAL(抽象产品)。
代码演示:抽象产品
public interface IStudentService { //获取所有学生信息 IList<Student> GetAllStudents(); } |
6. 在解决方案中添加数据访问层DAL(实体产品),并利用文件夹将不同的实体产品分类,如图4所示。
图4 实体产品
代码演示:实体产品
/// <summary> /// 获得所有学生信息 /// </summary> /// <returns>所有学生信息集合</returns> public IList<Student> GetAllStudents() { //创建SQL语句 string sql = "select * from sys.infos"; //创建泛型集合 IList<Student> students = new List<Student>(); //执行SQL语句得到结果集 OracleDataReader odr = dbh.ExecuteReader(sql); //遍历结果集 while(odr.Read()) { Student student = new Student();
student.StuID = Convert.ToString(odr["StuID"]); student.StuName = Convert.ToString(odr["StuName"]); student.StuAddress = Convert.ToString(odr["StuAddress"]); student.Seat = Convert.ToInt32(odr["Seat"]); student.Gender = Convert.ToString(odr["Gender"]); student.EnRollDate = Convert.ToDateTime(odr["EnRollDate"]); student.ClassNo = Convert. ToString (odr["ClassNo"]); //添加到泛型集合 students.Add(student); } //返回 return students; } |
7. 在解决方案中添加业务逻辑层,命名为StudentManager.cs。
代码演示:BLL层
/// <summary> /// 获取所有学生信息 /// </summary> /// <returns>所有学生信息集合</returns> public IList<Student> GetAllStudents() { //利用抽象工厂创建实体工厂 Factory factory = Factory.CreateFactory(); //利用工厂创建产品 IStudentService iss = factory.GetStudentService(); return iss.GetAllStudents(); } |
8. 在解决方案中添加抽象工厂,并添加相应实体工厂,如图5所示。
图5 抽象工厂
代码演示:抽象工厂
//抽象工厂 public abstract class Factory { public static Factory CreateFactory() { //采用反射技术得到配置文件中的配置信息 string factoryType = Config.FactoryType; Factory factory = (Factory)System.Reflection.Assembly.Load("DBFactory").CreateInstance(factoryType); return factory; }
//定义子类(实体工厂)的操作规则 public abstract IStudentService GetStudentService(); } |
9. 在表示层添加数据展示控件,通过设定属性绑定数据提取方法,实现案例目标。
-
标签错误:<!-- #Label#
labelId=20160707140604
moduleId=1
classId=12231768634
orderby=2
fields=url,title,u_info
attribute=
datatypeId=22192428132
recordCount=3
pageSize=
<htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate>
-->
- 我要参加技术沙龙