加菲猫窝

房价日涨,生活艰难
随笔 - 42, 评论 - 504, 引用 - 61

导航

关于

标签

每月存档

最新留言

广告

 

PetShop可以使用SQLServer或者Oracle作为数据库,基于SQLServer和Oracle的差异,PetShop作了一个中间层DAL(Data Access Layer),来实现这个功能。

DAL层供BLL(Business Logic Layer)层调用,封装和数据库有关的实现细节。

在DAL命名空间中有如下的interface:

IAccount  / IInventory / IItem  / IOrder / IProduct / IProfile

然后分别使用SQLServer和Oracle实现了以上的接口,以 IAccount  接口为例子:

IAccount  接口实现用户帐户的登录和注销等功能,以下是其接口方法:

  AccountInfo SignIn(string userId, string password);

  AddressInfo GetAddress(string userId);

  void Insert(AccountInfo account);

  void Update(AccountInfo Account);

以上的方法,大家都可以看出它们相应的功能。

PetShop.SQLServerDAL 命名空间中是这样实现

public class Account : IAccount{

...

public AccountInfo SignIn(string userId, string password) {

    SqlParameter[] signOnParms = GetSignOnParameters();

    signOnParms[0].Value = userId;
    signOnParms[1].Value = password;

    using (SqlDataReader rdr = SQLHelper.ExecuteReader(SQLHelper.CONN_STRING_NON_DTC, CommandType.Text, SQL_SELECT_ACCOUNT, signOnParms)) {
    if (rdr.Read()) {
    AddressInfo myAddress = new AddressInfo(rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), rdr.GetString(4), rdr.GetString(5), rdr.GetString( 6 ), rdr.GetString(7), rdr.GetString( 8 ), rdr.GetString(9));
     return new AccountInfo(userId, password, rdr.GetString(0), myAddress, rdr.GetString(10), rdr.GetString(11), Convert.ToBoolean(rdr.GetInt32(12)), Convert.ToBoolean(rdr.GetInt32(13)));
    }
    return null;
   }
}

在这里面使用SqlDataReader ,SQLHelper(PetShop对SQLServer调用的封装)实现了用户登录功能。

在PetShop.OracleDAL命名空间中的IAccount实现和其类似,除了部分代码细节,主要是OracleDataReader/OraHelper的变化。

在BLL中,只要一个接口的引用,然后使用Factory根据配置文件创建出SQL或者Oracle的相应的DAL对象,就可以对上层屏蔽具体的数据库实现。

让我们看看namespace PetShop.BLL 中Account(这个不是实现IAccount接口的)的SignIn方法:

  public AccountInfo SignIn(string userId, string password) {

   // 对用户和密码的基本的非空验证
   if ((userId.Trim() == string.Empty) || (password.Trim() == string.Empty))
    return null;

   // 使用DALFactory根据配置创建IAccount 的 SQL 或者 Oracle 实例
   IAccount dal = PetShop.DALFactory.Account.Create();

   // 调用接口方法
   AccountInfo account = dal.SignIn(userId, password);

   // Return the account
   return account;
  }
待续...

其他推荐资料:

.Net PetShop 4.0的层次结构 (ZT)

对比.NET PetShop和Duwamish来探讨Ado.NET的数据库编程模式

浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)

《解剖PetShop》系列

打印 | 张贴于 2004-05-02 10:14:00 | Tag:DotNet

留言反馈

#回复: PetShop学习笔记(1)-DAL层和类工厂 编辑
我也是也是一个初学者,我对你的研究很感兴趣也很想学习。能不能有幸得到你的笔记。
我的邮箱是:zhangjuguang@tom.com
谢谢!
2007-08-24 09:10:00 | [匿名用户:C.H.FELLOW]
#回复: PetShop学习笔记(1)-DAL层和类工厂 编辑
因为最近也在学这个Petshop系统,可是还是有好多不懂,能看看你的笔记吗,我是初学者,我的邮箱是chenyanjun917@sina.com 先谢谢了
2007-01-04 14:30:00 | [匿名用户:cyj917]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
我是人民邮电出版社计算机图书策划编辑张涛,你的技术造诣很深,你的经验和技术都是这一领域学子们渴望学习的,把您沉淀的知识和技术写出来,是许多读者期待的,所以,我期待和你合作出版您的大作.我的联系方式为:电话010-67175484,MAIL:mymailyou2003@yahoo.com.cn;zhangtao@ptpress.com.cn;
祝:工作愉快!
张涛
2006-09-29 15:10:00 | [匿名用户:zhnagtao]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
顶!好文章!
2006-08-27 19:13:00 | [匿名用户:QQ]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
能给我看看笔记吗???
hanxingyidian@126.com
。NET技术员
2006-05-23 16:57:00 | [匿名用户:刘勇]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
写的不错,能不能介绍一下这样的架构优势,另外sqlhelper应当是ms enterprise library的DAAD中封装的类
2006-05-08 17:03:00 | [匿名用户:scorpions]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
我也想看看你的笔记
可以吗?
21lj@21cn.com

2006-04-05 17:10:00 | [匿名用户:大地]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
我也想看看你的笔记
可以吗?
lilian.li@BenQ.COM
2006-03-29 19:49:00 | [匿名用户:pandoro]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
to xuexi:
这里不使用接口也可以,但是需要把IDAL中那些接口声明为基类,类中的方法声明为虚方法,然后SQLDAL和OracleDAL那些类就继承IDAL中声明的类,这样在调用时候就只要直接实例化这个基类就可以了,使用工厂的原因是屏蔽了底层的数据操作,上层的使用者不需要知道现在是使用SQLServer呢还是Oracle
2006-03-29 17:10:00 | [匿名用户:忘了时间的钟]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
定義接口后﹐就要保証每個單獨的編寫DAL都執行這個接口所定義的方法﹐也就是說﹐接口定義了多個個方法﹐實現這個接口的類就要實現多少個方法.
2006-02-16 20:21:00 | [匿名用户:精浪]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
接口的运用是oo思想中封装的一个运用。封装得越好、对用户越透明、实现的东西越有复用性,越容易修改。
2006-01-17 11:16:00 | [匿名用户:jiaong]
#关于petshop的研究站收集 编辑
2005-12-21 09:51:00 | [匿名用户:domizzi]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
good!
2005-12-18 21:02:00 | [匿名用户:加湿机]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
好!
2005-12-18 21:02:00 | [匿名用户:超声波]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
使用接口和工厂,避免了业务层和数据访问层的直接联系,才能支持多种数据库啊。
2005-10-14 13:56:00 | [匿名用户:NadOo]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
接口可以理解为一种标准吗(初学)
如果不使用借口,,直接实例PetShop.SQLServerDAL.Account也可以一样啊!!
为什么要用接口!!,除了标准带来的好处外,,它还有其他意义吗!!
2005-09-28 11:47:00 | [匿名用户:xuexi ]
#re:PetShop学习笔记(1)-DAL层和类工厂 编辑
PetShop学习笔记(1)-DAL层和类工厂ooeess
2005-06-16 04:07:00 | [匿名用户:气味检测仪]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
SO SO
2005-05-25 15:07:00 | [匿名用户:SS]
#re:PetShop学习笔记(1)-DAL层和类工厂 编辑
^_~,pretty good!csharpsseeoo
2005-05-18 15:05:00 | [匿名用户:光谱仪]
#re:PetShop学习笔记(1)-DAL层和类工厂 编辑
^_^,Pretty Good!
2005-04-16 05:09:00 | [匿名用户:广播综合测试仪]
#re:PetShop学习笔记(1)-DAL层和类工厂 编辑
^_^,Pretty Good!
2005-04-10 20:09:00 | [匿名用户:空气质量传感器]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
不好意思,最近没有搞DotNet了,没有写新文章
2005-04-07 00:30:00 | [匿名用户:Carfield的猫窝]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
还有续吗,我想看看,能发给我你的笔记么?
谢谢

sonicey@126.com
2005-04-04 16:32:00 | [匿名用户:毒日头]
#re: PetShop学习笔记(1)-DAL层和类工厂 编辑
看了一下
2005-01-07 21:09:00 | [匿名用户:释都]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.1.8