.NET Petshop详解(三):petshop三层结构之MiddleTire

转载 2006年05月29日 10:55:00
通过前面的文章,我们对.NET Petshop的整个结构有了一个大致的了解,也清楚的知道了数据库的设计模式和实现的细节,尤其值得一提的是通过存储过程访问数据库。在接下来的这篇文章里,我将和大家一起来探究一下.NET Petshop的中间层。
根据三层结构的设计原则,中间层封装的是业务逻辑和规则,在这个网络宠物商店的例子中,购物处理,订单处理,帐号管理,产品查询等等都是具体的业务逻辑,至于与用户交互并不是中间层要处理的问题。它处理是与具体的用户界面和交互无关,而仅仅是核心的商业规则和逻辑。.NET Petshop的中间层业务逻辑被封装为一个.NET 组件,它的命名空间为Pet Shop.Components(编译后在bin的文件夹里面有一个petshop.dll的文件)。图1是.NET Petshop解决方案中间层的类视图和文件视图。
  
接下来,我们模拟顾客到百货超市采购日常用品的过程来说明运作的流程以及抽象出重要的概念(实际上User case,我们在领域分析的时候会这么做,并且是很重要的一步,从这里可以初步的发现在我们实施的系统中将要涉及到的逻辑实体,进而可以为数据库建模设计以及类设计提供参考)。
购物用例的业务分析:
1 客户有购买商品的意愿;
2 客户到登陆管理员处登记,且成功登记;
3 在登记处推一个购物车;
4 在超市内查找所购商品类别存放的货架;
5 在具体的货架上查找某一具体品牌的商品;
6 将符合意愿的商品放入自己的购物车;
7 重复4-6
8 购物完毕;
9 到付款处计算总价格并付款;
10 打印购物清单;
11 退还购物车;
12 取走购物,购物完毕;
 
备注:在这个用例中,我们做了一些前提和假设,为的是方便.NET Petshop的分析,比如说在实际生活中根本就不需要第二步。
 
通过这个用例的分析,我们至少可以抽象出一下几个重要概念,并且能在应用程序里面找到对应的类:客户对应Customer、商品对应Product、购物车对应ShoppingCart、商品类别对应Category、具体商品对应Item、清单对应Order。
正如我前面说过的,这几个概念对于我们的业务建模和系统建模是非常有用的。正是通过这样的分析,在.NET Petshop的业务逻辑里面共有9个核心类和5个轻量级的数据结构类。同样的方式,我在这里列出这些类,并加以说明(见表1)。
 

类名称
说明
BasketItem
代表购物车ShoppingCart里的一项购物商品。
Customer
用于帐号管理和登陆验证。
CustomerDetails
用户帐号的详细信息。
CustomerAddress
用户帐号的地址信息。
Error
用于登陆出错的帮助功能。
Item
代表某类产品中的具体一项商品。
ItemResults
搜索Item的结果集。
Order
购物完毕后的购物清单和订单。
Product
大类别里面的某类产品。
ProductResults
搜索产品的结果集。
Profile
用户的配置。
ShoppingCart
购物车,用于购物的整个过程,直到下订单。
Database
通过ADO.NET访问数据库,封装了具体的访问方法。
SearchResults
模糊搜索的结果集。

 
表1:.NET Petshop中间层的类
 
CustomerAddress, CustomerDetails, ItemResults, ProductResults, and SearchResults这几个轻量级的数据结构类为在数据层和展示层之间提供了一种松散的数据绑定调用。这些类都被设计为有公开的属性,ASP.NET 的web页面可以通过这些属性访问数据。下面这段类的代码说明了这5个类是如何暴露自己的公开属性供展示层使用的。
 
public class ProductResults
       {
              private string m_productid;
              private string m_name;
 
              public string productid {
                     get { return m_productid; }
                     set { m_productid = value; } 
              }
              public string name {
                     get { return m_name; }
                     set { m_name = value; } 
              }
       }
 
在.NET Petshop详解(二)中我们就说过数据库的访问是通过存储来进行的,我们看看下面这部分代码就知道了:
 
       public string Login(string userName, string password) {
                     string customerID;
 
                     // params to stored proc
                     Database data = new Database();
                     SqlParameter[] prams = {
                            data.MakeInParam("@username",    SqlDbType.VarChar, 25, password),
                            data.MakeInParam("@password",    SqlDbType.VarChar, 25, userName),
                            data.MakeOutParam("@CustomerID", SqlDbType.VarChar, 25)
                     };
 
                     // create data object and params
                     data.RunProc("upAccountLogin", prams);    // run the stored procedure
                     customerID = (string) prams[2].Value;     // get the output param value
 
                     // if the customer id is an empty string, then the login failed
                     if (customerID == string.Empty)
                            return null;
                     else
                            return customerID;
              }
 
这段代码是Customer类的Login方法,它是通过将用户输入的用户名userName和密码password做为输入参数传递给存储过程upAccountLogin的,这个存储过程完成在Sigon用户帐号表里面查找该用户是否合法,最后返回一个字符串的用户ID值。在这里没有使用SQL查询语句,很好的分离了逻辑。具体的数据库访问是通过Database来完成的,我们将在后面的文章中继续探讨它的运作。
ShoppingCart是比较有意思的一个类,也是很重要的一个类。它是与状态有关的一个类,在.NET Petshop里面,它的状态是通过ASP.NET Session state来管理的,关于其进一步的细节留待后面讨论。
.NET Petshop的中间层的探讨先到此,我在这里只是抛砖引玉,很多的东西要深入代码才可以搞的更加清楚。欢迎大家继续与我一起关注下一篇.NET Petshop的数据展示层。

你真的了解分层架构吗?——写给被PetShop"毒害"的朋友们

一叶障目 .NET平台上的分层架构(很多朋友称其为“三层架构”),似乎是一个长盛不衰的话题。经常看到许多朋友对其进行分析、探讨、辩论甚至是抨击。笔者在仔细阅读了大量这方面文章后,认为许多朋友在分层架...
  • wgz_wlky
  • wgz_wlky
  • 2016年04月01日 01:19
  • 399

基于PetShop的数据可视化网站(一):基本结构

项目需要制作一个数据可视化网站,本人从零基础开始进行学习以及实现,这篇BLOG对所学的内容进行简单的总结。...
  • maoyushiren
  • maoyushiren
  • 2016年02月04日 16:29
  • 190

基于Node的PetShop,RESTful API以及认证

由于宠物店的业务发展需要,我们需要一种更加便捷的方式来管理日益增多的宠物和客户。最好的方法就是开发一个APP,我可以用这个APP来添加、更新和删除宠物。同时,业务要给宠物店的会员用户有限查看某些宠物。...
  • future_challenger
  • future_challenger
  • 2016年07月01日 11:15
  • 2282

WCF版的PetShop之一:PetShop简介

原文出处:http://kb.cnblogs.com/page/52612/   在《WCF技术剖析(卷1)》的最后一章,我写了一个简单基于WCF的Web应用程序,该程序模拟一个最简单的网上订购...
  • chelen_jak
  • chelen_jak
  • 2013年01月31日 16:41
  • 388

PetShop的系统架构设计

前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来。这种争论不可避免带有浓厚的商...
  • fengsh998
  • fengsh998
  • 2013年05月09日 11:03
  • 1299

PetShop的系统架构设计

《解剖PetShop》系列之一 原文出处:http://www.cnblogs.com/wayfarer/archive/2006/04/14/375382.html 前言:PetShop...
  • chelen_jak
  • chelen_jak
  • 2013年01月30日 12:17
  • 562

基于PetShop的数据可视化网站(三):可视化插件

在之前的系列中,我们可以较为轻松的将数据提取出来,但是仅仅使用表格等形式十分不直观。本文将通过百度地图API和ECharts对数据进行绘图。...
  • maoyushiren
  • maoyushiren
  • 2016年02月04日 21:20
  • 141

.net中的三层架构简介

三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想...
  • Vikerfeng
  • Vikerfeng
  • 2014年03月16日 13:25
  • 3047

PetShop中缓存机制

4.3 在PetShop 4.0中ASP.NET缓存的实现   PetShop作为一个B2C的宠物网上商店,需要充分考虑访客的用户体验,如果因为数据量大而导致Web服务器的响应不及时,页面和查询数据...
  • qq_29227939
  • qq_29227939
  • 2016年09月17日 18:03
  • 137

《解剖PetShop》系列之一

前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来。这种争论不可避免带有浓厚的商...
  • jiangfei009003
  • jiangfei009003
  • 2013年08月07日 17:59
  • 506
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.NET Petshop详解(三):petshop三层结构之MiddleTire
举报原因:
原因补充:

(最多只允许输入30个字)