惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Exploit Database - CXSecurity.com
F
Fortinet All Blogs
U
Unit 42
F
Full Disclosure
雷峰网
雷峰网
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
罗磊的独立博客
D
DataBreaches.Net
C
Check Point Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
O
OpenAI News
C
CXSECURITY Database RSS Feed - CXSecurity.com
aimingoo的专栏
aimingoo的专栏
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
SegmentFault 最新的问题
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Hacker News
The Hacker News
Webroot Blog
Webroot Blog
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
N
News | PayPal Newsroom
P
Proofpoint News Feed
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
C
Cybersecurity and Infrastructure Security Agency CISA
N
News and Events Feed by Topic
Google Online Security Blog
Google Online Security Blog
H
Help Net Security
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
M
MIT News - Artificial intelligence
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
MyScale Blog
MyScale Blog
腾讯CDC

博客园 - 9who

Nopcommerce2.70版本如何在vs2010中打开 UrlRewriter 伪url的配置 - 9who - 博客园 百度,google,雅虎等搜索引擎的高级搜索语法 开发记录——触发器实现 数据库关联字段 FCKEditor在.net的使用 JS函数验证总结 - 9who - 博客园 如何构造一个C#语言的爬虫蜘蛛程序 ASP.NET26个常用性能优化方法 CSS基本布局16例 CSS命名规范(建议版) web布局最实用的12条css技巧 SQL2005数据库转换到SQL2000 我的几个.NET编程习惯 SQL2005示例数据库|AdventureWorks下载安装|NORTHWND下载安装|PUBS下载安装 (转)Ext与.NET超完美整合 .NET开发者的超级优势 C#与OOP之 接口 C#中面向对象的OOP概念 ASP.NET常用到的js通用函数 c#代码可以做成dll来使用 ASP.NET 脚本侵入概述
petshop4.0 各个文件的作用
9who · 2008-09-20 · via 博客园 - 9who

petshop4.0设计说明 (转)

一、项目名称及描述:(实现步骤为:4-3-6-5-2-1)

1、WEB=表示层

2、BLL=业务逻辑层

3、IDAL=数据访问层接口定义

4、Model=业务实体

5、DALFactory=数据层的抽象工厂(创建反射)

6、SQLServerDAL=SQLServer数据访问层 / OracleDAL=Oracle数据访问层

DBUtility 数据库访问组件基础类

二、项目引用关系

1、Web 引用 BLL。

2、BLL 引用 IDAL,Model,使用DALFactory创建实例。

3、IDAL 引用 Model。

4、Model 无引用。

5、DALFactory 引用IDAL,通过读取web.config里设置的程序集,加载类的实例,返回给BLL使用。

6、SQLServerDAL 引用 Model和IDAL,被DALFactory加载的程序集,实现接口里的方法。

三、实现步骤

1、创建Model,实现业务实体。

2、创建IDAL,实现接口。

3、创建SQLServerDAL,实现接口里的方法。

4、增加web.config里的配置信息,为SQLServerDAL的程序集。

5、创建DALFactory,返回程序集的指定类的实例。

6、创建BLL,调用DALFactory,得到程序集指定类的实例,完成数据操作方法。

7、创建WEB,调用BLL里的数据操作方法。

注意:

1、web.config里的程序集名称必须与SQLServerDAL里的输出程序集名称一致。

2、DALFactory里只需要一个DataAccess类,可以完成创建所有的程序集实例。

3、项目创建后,注意修改各项目的默认命名空间和程序集名称。

4、注意修改解决方案里的项目依赖。

5、注意在解决方案里增加各项目引用。

1
WEB
     表示层

2
Model
PetShop.Model PetShop.Model 业务实体

3
BLL
PetShop.BLL PetShop.BLL 业务逻辑层

4
DALFactory
PetShop.DAL PetShop.DALFactory 数据层的抽象工厂

5
IDAL
PetShop.IDAL PetShop.IDAL 数据访问层接口定义

6
SQLServerDAL
PetShop.SQLServerDAL PetShop.SQLServerDAL SQLServer数据访问层

7
OracleDAL
PetShop.OracleDAL PetShop.OracleDAL Oracle数据访问层

8
DBUtility
PetShop.DBUtility PetShop.DBUtility 数据库访问组件基础类

9
CacheDependencyFactory
PetShop.CacheDependencyFactory PetShop.CacheDependencyFactory 缓存依赖类的工厂类

10
ICacheDependency
PetShop.ICacheDependency PetShop.ICacheDependency 缓存依赖类接口

11
TableCacheDependency
PetShop.TableCacheDependency PetShop.TableCacheDependency 缓存依赖实现类

12
IBLLStrategy
PetShop.IBLLStrategy PetShop.IBLLStrategy 同步/异步处理策略接口(实现在bll根据配置反射选择)

13
MessagingFactory
PetShop.MessagingFactory PetShop.MessagingFactory 异时处理消息队列的抽象工厂

14
IMessaging
PetShop.IMessaging PetShop.IMessaging 异时处理消息队列接口定义

15
MSMQMessaging
PetShop.MsmqMessaging PetShop.MsmqMessaging 异时处理消息队列的实现

16
Profile
PetShop.Profile PetShop.Profile Profile的数据访问层

17
ProfileDALFactory
PetShop.ProfileDALFactory PetShop.ProfileDALFactory ProfileDAL的工厂类(反射创建ProfileDAL)

18
IProfileDAL
PetShop.IProfileDAL PetShop.IProfileDAL Profile的数据访问层接口定义

19
OracleProfileDAL
PetShop.OracleProfileDAL PetShop.OracleProfileDAL Oracle的Profile Providers

做用户状态管理

20
SQLProfileDAL
PetShop.SQLProfileDAL PetShop.SQLProfileDAL SQL Server 的Profile Providers

做用户状态管理

21
Membership
PetShop.Membership PetShop.Membership Membership认证和授权管理

22
OrderProcessor
PetShop.OrderProcessor PetShop.OrderProcessor 后台处理进程,处理订单队列


些项目可以分类来理解,主要包括以下几个部分,
Web         外观层
Bill                     业务逻辑层
IDAL                 数据访问层接口
DALFactory        数据层的抽象工厂
SQLServerDAL     SQL数据访问层
OracleDAL                Oracle数据访问层
Model                         业务实体层
DBUtility                    数据访问组件基础类

CacheDependencyFactory 缓存依赖的工厂类
ICacheDependency           缓存依赖类接口
TableCacheDependency   缓存依赖实现类

IBLLStrategy                      同步/异步处理策略接口
MessagingFactory               异时处理消息队列的抽象工厂
IMessaging                            异时处理消息队列接口定义
MSMQMessaging                    异时消息队列的实现

Profile                                          Profile数据访问层
ProfileDALFactory                      ProfileDAL的工厂类
IProfileDAL                                Profile数据访问层接口定义


OracleProfileDALOracle的Profile Providers 做用户状态管理
SQLProfileDALSQL Server 的Profile Providers 做用户状态管理

MembershipMembership认证和授权管理
OrderProcessor后台处理进程,处理订单队列

SQL数据库中含有四个数据库

它们分别为:MSPetShop4 ,MSPetShop4Oreder,  MSPetShop4Profile 和MSPetShop4Servers

其中MSPetShop4有如下几个表分别为CateGory  Product Item Supplier和Inventory五个表

其中CateGory存储宠物类别有关信息Product存储宠物的商品目录Item存储宠物的详细信息

Supplier存储相关供应商的信息Inventory存储和每种宠物的具体数量

MSPetShop4Order 含有一下三个表其数据库模型如下

Order表存储了订单的详细通信信息OrderStatus记录了订单的状态LineItem记录了订单中的宠物数量等等详细信息

MSPetshopPrifile 的数据库模型如下

其中Profile表记录了客户的基本活动信息

Account 记录了客户的身份地址相关信息

Cart记录了用户的意向清单和购物列表

最后一个数据库就是MSPetShop4Servers它相当于Visual Studio内置的成员和角色管理的数据库

这里不在讨论

在这么简单的功能中建如此大的工程和复杂的数据库设计.微软肯定有自己的卖点

下面我们看看PetShop4.0中相对于3.0的新增相关技术!

?

用 System.Transactions 代替服务组件。

?

用强类型集合的泛型代替松散类型的 ILists。

?

ASP.NET 2.0 成员身份,用于用户身份验证和授权。

?

用于 Oracle 10G 的自定义 ASP.NET 2.0 成员身份提供程序。

?

ASP.NET 2.0 自定义 Oracle 和 SQL Server 配置文件提供程序,用于用户状态管理。

?

用母版页取代 ASP.NET Web 用户控件,从而获得一致的外观。

?

ASP.NET 2.0 向导控件。

?

使用 SqlCacheDependency(而非基于超时)的数据库级缓存失效。

?

启用基于消息队列构建的异步 Order 处理

在这个工程中用到了抽象工厂设计模式

我对设计模式了解的很少,明天深入学习一下抽象工厂设计模式,同时试着做一个类似多层的项目以尽快熟悉2005和了解它的新特性

所谓“依懒注入”

就是将应用程序所依赖的组件在运行时动态的加载到应用

程序中。依赖注入的目标并非为应用程序添加更多的功能,而是提升了组件的

重用性,并为应用程序搭建一个具有较强灵活性和扩展性的平台。在程序实现上就用

Assembly.Load(AssemblyName).CreateInstance(typeName)在程序运行时动态创建实例.PetShop4.0中多次应用了与配置文件相强合的反射注入技术。下面就介绍一下反射注入技术在PetShop4.0多层应用程序和应用。

项目名

PetShop.CacheDependencyFactory

类名

DependencyAccess

方法

privatestaticIPetShopCacheDependency LoadInstance(string className)

配置文件中的值

<appSetting>

……….

<add key="CacheDependencyAssembly" value="PetShop.TableCacheDependency"/>

……

</appSetting>

代码文件中的实现

string path=ConfigurationManager.AppSettings["CacheDependencyAssembly"];

string fullyQualifiedClass = path + "." + className;

return (IPetShopCacheDependency)Assembly.Load(path)

.CreateInstance(fullyQualifiedClass);

从上面的实现来看其实是很简单的。三个步骤就实现了:两前个步骤,主要是为动态创建

实例提供参数:程序集名称,和类名称(类型名).

1.    执行ConfigurationManager.AppSettings[“keyName”]来获取配置文件中的键值,也就

程序集的名称AssemblyName。

2.    组合类名称typeName。

3.    执行Assembly.Load(AssemblyName).CreateInstance(typeName)进行动太创建实例

其实PetShop4.0中实现反射注入技术都是上面的那种思想。所以下面就省去配置文件中的

信息和实现的代码实现信息,只是统计反射注入技术在PetShop4.0中应用的位置信息。

项目名

PetShop.DALFactory

类名

DataAccess

方法

1.    public static PetShop.IDAL.ICategory CreateCategory()

2.       public static PetShop.IDAL.IInventory CreateInventory()

3.       public static PetShop.IDAL.IItem CreateItem()

4.       public static PetShop.IDAL.IOrder CreateOrder()

5.       public static PetShop.IDAL.IProduct CreateProduct()

项目名

PetShop.MessagingFactory

类名

QueueAccess

方法

public static PetShop.IMessaging.IOrder CreateOrder()

项目名

PetShop.ProfileDALFactory

类名

DataAccess

方法

Publics  tatic

PetShop.IProfileDAL.IPetShopProfileProvider

CreatePetShopProfileProvider()