当前位置: 首页 > 编程日记 > 正文

Microsoft .NET Pet Shop 4 架构与技术分析

1.项目概述与架构分析微软刚推出了基于ASP.NET 2.0下的Pet Shop 4, 该版本有了一个全新的用户界面。是研究ASP.NET 2.0的好范例啊,大家都知道,一直以来,在.NET和Java之间争论不休,到底使用哪个平台开发的企业级应用性能最好、结构最优、生产力最高。为了用事实说话,通过对项目各方面的性能评估进而在比较.NET和Java的高下。用户做比较的这个项目就是Petshop。正因为Petshop肩负着上面所说的重任,各方面必须是最优的,架构设计应该是经过慎重考虑的。所以其一经推出,便成为了开发者、架构师等人学习、研究的典范。
日前微软推出了基于.NET Framework 2.0开发的Petshop 4。新的Petshop4实现了与Petshop 3相同甚至更多的特性,由于采用了Master Pages,Membership,以及Profile,SqlCacheDependency,但是代码量却减少了四分之一。同时,在事务、数据缓存、安全方面使用了.NET 2.0附带的特性,构建了一个灵活的最佳实践的应用程序。
 
他们利用了Project Conversion Wizard把项目从ASP.NET 1.1移植到了ASP.NET 2.0,然后做了以下改动:
1.用System.Transactions代替了原来的Serviced Components提供的事务功能
代码实现:PetShop.BLL.OrderSynchronous 的 public void Insert(PetShop.Model.OrderInfo order)
2.用强类型的范型集合代替了原来的弱类型集合
        public IList<ProductInfo> GetProductsByCategory(string category)
        {
            // Return new if the string is empty
            if (string.IsNullOrEmpty(category))
                return new List<ProductInfo>();
 
            // Run a search against the data store
            return dal.GetProductsByCategory(category);
        }
3.采用ASP.NET 2.0 Membership来做认证和授权
4.创建了针对Oracle 10g的Custom ASP.NET 2.0 Membership Provider
5.利用ASP.NET 2.0的Custom Oracle 和 SQL Server Profile Providers 做用户状态管理,包括购物车等
6.采用了Master Pages,取代了原来的用户控件,来实现统一的界面效果
7.使用了ASP.NET 2.0 Wizard控件实现check-out
8.使用了SqlCacheDependency来实现数据库层次的缓存更新(cache invalidation)功能
9.使用了消息队列来实现异时订单处理。
 
2.整体架构:

数据库:(暂略)
项目列表:从整体可以看出,Pet Shop 4的项目体系已经很庞大,考虑的方面也较3.0更全面复杂。
 
序号
项目名称
描述
1
BLL
业务逻辑层
2
CacheDependencyFactory
缓存依赖类的工厂类
3
WEB
表示层
4
DALFactory
数据层的抽象工厂
5
DBUtility
数据访问类组件
6
IBLLStrategy
同步/异步策略接口
7
ICacheDependency
缓存依赖类接口
8
IDAL
数据访问层接口定义
9
IMessaging
异时处理消息队列接口定义
10
IProfileDAL
Profile的数据访问层接口定义
11
Membership
Membership认证和授权管理
12
MessagingFactory
异时处理消息队列的抽象工厂
13
Model
业务实体
14
MSMQMessaging
异时处理消息队列的实现
15
OracleDAL
Oracle数据访问层
16
OracleProfileDAL
Oracle的Profile Providers
做用户状态管理,包括购物车等
17
OrderProcessor
后台处理进程,处理订单队列
18
Profile
Profile的数据访问层
19
ProfileDALFactory
ProfileDAL的工厂类(反射创建ProfileDAL)
20
SQLProfileDAL
SQL Server 的Profile Providers
做用户状态管理,包括购物车等
21
SQLServerDAL
SQLServer数据访问层
22
TableCacheDependency
缓存依赖实现类
 
项目分解
由于整体已经有22个项目,所以,对于初学者一看就晕了,所以,我做了分解,可以大体上分几块去理解。
序号
项目名称
描述
1
WEB
表示层
2
Model
业务实体
3
BLL
业务逻辑层
4
DALFactory
数据层的抽象工厂
5
IDAL
数据访问层接口定义
6
SQLServerDAL
SQLServer数据访问层
7
OracleDAL
Oracle数据访问层
8
DBUtility
数据库访问组件基础类
9
CacheDependencyFactory
缓存依赖类的工厂类
10
ICacheDependency
缓存依赖类接口
11
TableCacheDependency
缓存依赖实现类
12
IBLLStrategy
同步/异步处理策略接口(实现在bll根据配置反射选择)
13
MessagingFactory
异时处理消息队列的抽象工厂
14
IMessaging
异时处理消息队列接口定义
15
MSMQMessaging
异时处理消息队列的实现
16
Profile
Profile的数据访问层
17
ProfileDALFactory
ProfileDAL的工厂类(反射创建ProfileDAL)
18
IProfileDAL
Profile的数据访问层接口定义
19
OracleProfileDAL
Oracle的Profile Providers
做用户状态管理
20
SQLProfileDAL
SQL Server 的Profile Providers
做用户状态管理
21
Membership
Membership认证和授权管理
22
OrderProcessor
后台处理进程,处理订单队列
 
 
 
3.Petshop 4中的设计模式
工厂模式:
首当其冲的就是工厂模式,很容易就可以看出来,也是应用最多的。
DALFactory:数据访问层的抽象工厂(决定创建哪种数据库类型的数据访问层。可以选择:SQLServer,Oracle)
CacheDependencyFactory缓存依赖类的工厂类。(创建具体表的缓存依赖)
MessagingFactory 异时处理消息队列的抽象工厂(反射创建具体的异时处理类
ProfileDALFactoryProfileDAL的工厂类(反射选择创建Oracle 和SQL Server的 ProfileDAL)
 
策略模式: IorderStrategy
 
 
 
中介模式
CategoryDataProxy ItemDataProxy  ProductDataProxy
 
 
 
暂时只看了这么多,以后有时间继续分解,如果你有不同的见解或经验,也请写下来,好让大家来共同学习,共同探讨,共同进步。
 
具体介绍可以参看MSDN
.NET Pet Shop 4: Migrating an ASP.NET 1.1 Application to 2.0
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp
 
下载
http://download.microsoft.com/download/8/0/1/801ff297-aea6-46b9-8e11-810df5df1032/Microsoft%20.NET%20Pet%20Shop%204.0.msi

相关文章:

一学就会的 Python 时间转化总结(超全)

作者 | Peter来源 | Python编程时光在生活和工作中&#xff0c;我们每个人每天都在和时间打交道&#xff1a;早上什么时候起床&#xff1f;地铁几分钟来一趟&#xff1f;中午什么时候开始午休&#xff1f;明天是星期几&#xff1f;距离上次买衣服已经2个月呢&#xff1f;领导让…

ny20 吝啬的国度

吝啬的国度 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述在一个吝啬的国度里有N个城市&#xff0c;这N个城市间只有N-1条路把这个N个城市连接起来。现在&#xff0c;Tom在第S号城市&#xff0c;他有张该国地图&#xff0c;他想知道如果…

Linux常见命令(二)

随着Linux应用的扩展许多同学开始接触Linux&#xff0c;根据学习Windwos的经验往往有一些茫然的感觉&#xff1a;不知从何处开始学起。虽然Linux桌面应用发展很快&#xff0c;但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行&#xff0c;无…

谷歌编程语言年度榜NO.1:知识体系总结(2021版)

本文专注整理一些有关Python学习的知识体系。整理的Python知识体系主要包括基础知识&#xff0c;Python热门的应用方向&#xff0c;推荐书籍&#xff0c;FAQ以及一些常见面试题目&#xff0c;包含了作为一个Python全栈工程师以及数据分析工程师在开发工作和学习中需要用到或者可…

看看大网站到底是如何保障网络安全的

首先&#xff0c;服务器上用的是私有的操作系统和数据库&#xff0c;所谓私有&#xff0c;并不是完全自己写&#xff0c;而是说&#xff0c;全部都是进行私有化改造过的&#xff0c;一般使用开源的操作系统和数据库进行改造&#xff0c;比如说操作系统使用free bsd的改&#xf…

php 魔术方法 说明

1、__get、__set这两个方法是为在类和他们的父类中没有声明的属性而设计的。◆__get( $property ) 当调用一个未定义的属性时&#xff0c;此方法会被触发&#xff0c;传递的参数是被访问的属性名。◆__set( $property, $value ) 给一个未定义的属性赋值时&#xff0c;此方法会被…

小功能 - 收藏集 - 掘金

中国可以访问 Google Codelabs 网站啦&#xff01; - 掘金今天&#xff0c;Google 官方又宣布了一条信息「全球皆可访问的 Google Codelabs 网站」&#xff0c;说是全球&#xff0c;其实我们大家心里都明白&#xff0c;这是针对中国开发者而专门发布的一个网站&#xff0c;最近…

ASP.NET设置数据格式与String.Format使用总结

{0:d} YY-MM-DD{0:p} 百分比00.00%{0:N2} 12.68{0:N0} 13{0:c2} $12.68{0:d} 3/23/2003{0:T} 12:00:00 AM{0:男;;女} DataGrid-数据格式设置表达式 数据格式设置表达式 .NET Framework 格式设置表达式&#xff0c;它在数据显示在列中之前先应用于数据。此表达式由可选静态文本…

Android Display System --- Surface Flinger

SurfaceFlinger 是Android multimedia 的一个部分&#xff0c;在Android 的实现中它是一个service &#xff0c;提供系统范围内的surface composer 功能&#xff0c;它能够将各种[url]应用[/url]程序的2D 、3D surface 进行组合。在具体讲SurfaceFlinger 之前&#xff0c;我们先…

最新组合式模型量化方法,实现FPGA最高硬件利用率,准确率-推理速度达到SOTA...

作者 | 王言治来源 | AI科技大本营&#xff08;ID:rgznai100&#xff09;深度神经网络&#xff08;DNN&#xff09;在图像、语言处理等领域获得了巨大成功&#xff0c;而如何将这些网络部署在ASIC、FPGA等嵌入式设备仍是热门研究方向。结构搜索&#xff0c;以及传统的剪枝、量化…

消息服务发送短信,手机接收不到短信解决思路

阿里云使用消息服务&#xff0c;发送注册码给手机。测试几次发现手机都接收不到&#xff0c;后台也没报错&#xff01;今天我提交自己的工单&#xff0c;售后工程师已经帮我解决了&#xff0c;非常感谢他&#xff01;官方代码&#xff1a;https://help.aliyun.com/document_det…

Asp.net中具体的日期格式化用法

1.绑定时格式化日期方法: <ASP:BOUNDCOLUMN DATAFIELD "JoinTime " DATAFORMATSTRING "{0:yyyy-MM-dd} " > <ITEMSTYLE WIDTH "18% " > </ITEMSTYLE > </ASP:BOUNDCOLUMN > 2.数据控件如DataGrid/DataList等的件格式…

日本「AI 鱼脸识别」项目,每分钟识别 100 条

来源 | HyperAI超神经头图 | 视觉中国近日&#xff0c;日本的一个 AI 分拣鱼类项目进入实验阶段。这将有望改善日本渔业劳动力老龄化及短缺的社会现状。日本作为岛国&#xff0c;其独特的地理位置&#xff0c;让国民自古以来就跟鱼结下了不解之缘&#xff0c;甚至形成了其独特的…

使用Spring实现邮件发送

2019独角兽企业重金招聘Python工程师标准>>> 这两天写个小程序需要使用邮件发送的功能&#xff0c;在网上搜索了一帮子文章&#xff0c;感觉还是使用Spring的邮件发送功能比较方便&#xff0c;哈哈&#xff0c;懒人就这样子了&#xff0c;不想再动了。整好了&#x…

GZip压缩与解压缩

GZIP的压缩与解压缩代码&#xff1a; public static class CompressionHelper{/// <summary> /// Compress the byte[] /// </summary> /// <param name"input"></param> /// <returns></returns> public static byte[] Compres…

String.Format()方法

String.Format方法是我们在.Net应用开发时经常使用到的&#xff0c;它的灵活使用有时能够达到事半功倍的效果&#xff0c;下面我们就借用MSDN上的一个示例来向大家展示String.Format的各种用法。 该示例展示了Numeric、DateTime和Enumeration标准格式的使用&#xff0c;另外&am…

Brian 的 Perl 问题之万能指南

为什么80%的码农都做不了架构师&#xff1f;>>> PerlChina brians Guide to Solving Any Perl Problem Home Page | All Pages | Recently Revised | Authors | Feeds | Export | 原 名&#xff1a;Brian’s Guide to Solving Any Perl Problem 中 文: Brian 的 Pe…

联手小米,雀巢中国推出健康管家Nesfinity,满足个性化生活需求管理

1月20日&#xff0c;雀巢中国携手小米战略合作正式开启&#xff0c;双方共同打造的雀巢健康管家“Nesfinity”正式发布。这项综合性智能健康生活新生态的合作&#xff0c;不仅开启了雀巢中国在智能物联网和大数据应用的新历程&#xff0c;更是双方由品牌合作跨入战略合作的开端…

使用joda-time工具类 计算时间相差多少 天,小时,分钟,秒

下面程序使用了两种方法计算两个时间相差 天&#xff0c;小时&#xff0c;分钟&#xff0c;秒 package jodotest;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.joda.time.DateTime;import org.joda.time.Days;import …

C语言格式控制符和转义字符

1. 格式控制符 格式输出printf 作用是向终端输出若干个类型任意的数据。 格式&#xff1a;printf &#xff08;格式控制符&#xff0c;输出列表&#xff09; 1) 格式控制符 l &#xff05; 格式说明引导符。 l &#xff0d; 指定…

面试高频题:单链表的逆置操作/链表逆序

函数内对形参的操作并不能影响实参&#xff0c;函数内修改的是实参的副本。要想在函数内部修改输入参数&#xff0c;要么传入的是实参的引用&#xff0c;要么传入的是实参的地址。 #include <iostream> #include <cstdlib> #include <cstring>//strlen using…

猖狂!微软、思科源码惨遭黑客 100 万美元打包出售

【编者按】SolarWinds 黑客攻击事件又延伸出新的危害了&#xff1a;微软、思科、FireEye 等公司的源代码在一网站公开出售&#xff0c;明码标价&#xff0c;甚至打包价为一百万&#xff0c;究竟是什么情况&#xff1f;整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;CSDNn…

vmstart的用法

vmstat命令是最常见的Linux/Unix监控工具&#xff0c;可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率&#xff0c;内存使用&#xff0c;虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令&#xff0c;一个是Linux/Unix都支持&#xff0c;二是…

配置.net 3.0开发环境

开发.net 3.0 应用程序&#xff0c;需要配置开发环境。配置步骤如下&#xff1a;1. 开发.net 3.0&#xff0c;首先当然要安装.NET Framework 3.0 了安装前使用windowsupdate安装好最新的更新&#xff08;Windows XP SP2 和Windows 2003 SP1一定要安装&#xff09;&#xff0c;下…

杭电 hdu 2096

小明AB&#xff1a;#include<iostream> using namespace std; int main(){int n;cin>>n;cin.ignore();while(n--){int a,b;cin>>a>>b;cout<<(a%100b%100)%100<<endl;}return 0; }转载于:https://blog.51cto.com/beyond316/1261849

关于2021年及未来,人工智能的5大趋势预测

吴恩达教授&#xff08;美国斯坦福大学计算机科学系和电子工程系副教授&#xff09;曾反复强调一句名言&#xff1a;"人工智能是新电力。" 我们正跟随着人工智能发展的脚步&#xff0c;走向第四次工业革命的浪潮之巅。 毋庸置疑&#xff0c;人工智能已经成为社会进步…

京东618:智能机器人JIMI的进击之路

ArchSummit全球架构师峰会深圳站将于2017年7月7日~8日在深圳华侨城洲际酒店召开&#xff0c;大会设置了相关专题来深入解读电商大促背后的技术故事&#xff0c;大会还邀请了eBay、WalmartLabs等国外顶尖技术专家&#xff0c;分享AI促销、搜索引擎、异地多活、库存物流等核心架构…

读懂深度迁移学习,看这文就够了 | 赠书

百度前首席科学家、斯坦福大学副教授吴恩达&#xff08;Andrew Ng&#xff09;曾经说过&#xff1a;迁移学习将是继监督学习之后的下一个促使机器学习成功商业化的驱动力。本文选自《深度学习500问&#xff1a;AI工程师面试宝典》&#xff0c;将重点介绍目前最热门的深度迁移学…

Visual Studio 2005 IDE 技巧和窍门

发布日期&#xff1a; 2007-02-26 | 更新日期&#xff1a; 2007-02-26James Lau Microsoft 项目经理 适用于&#xff1a; Microsoft Visual Studio 2005 摘要&#xff1a;Visual Studio 2005 是目前业内一流的开发工具&#xff0c;我想在此与大家分享一些使用技巧和窍门&#x…

ZOJ 1025 Wooden Sticks(快排+贪心)

题目链接&#xff1a;http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId25 题目大意&#xff1a;机器运送n个木条&#xff0c;每个木条有一个长度和重量。运送第一根木条需要1分钟的准备时间&#xff0c;接下来如果后一根木条的长度和重量都大于等于前一根木条&…