Rickie Lee's blog

Welcome to my blog. I'm mainly involved in .Net platform and corresponding technologies. Thanks.

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  383 随笔 :: 3 文章 :: 1243 评论 :: 112 引用

DuwamishMicrosoft提供一个企业级的分布式系统架构,如果开发企业级的分布式系统,可以模仿这种架构,如果是开发一些简单的系统,则完全可以简化。

 

以前也学习过Duwamish范例,只是发现不同时间,不同经历,有不同的体会。正如卢彦所说的一样:通过研究Duwamish示例,高手能够领悟到.Net应用架构的设计思想,低手能够学习到.Net的编程技巧,实在是老少皆宜。

 

因此,这里再次学习并体验一次Duwamish范例。

 

1Duwamish 7.0 结构分为四个逻辑层(FROM MSDN):

Web Presentation

Web 层为客户端提供对应用程序的访问。这一层是作为 Duwamish.sln 解决方案文件中的 Web 项目实现的。Web 层由 ASP.NET Web 窗体和代码隐藏文件组成。Web 窗体只是用 HTML 提供用户操作,而代码隐藏文件实现各种控件的事件处理。

业务外观层 Business Facade

业务外观层为 Web 层提供处理帐户、类别浏览和购书的界面。这一层是作为 Duwamish.sln 解决方案文件中的 BusinessFacade 项目实现的。业务外观层用作隔离层,它将用户界面与各种业务功能的实现隔离开来。除了低级系统和支持功能之外,对数据库服务器的所有调用都是通过此程序集进行的。

业务规则层 Business Rules

业务规则层是作为 Duwamish.sln 解决方案文件中的 BusinessRules 项目实现的,它包含各种业务规则和逻辑的实现。业务规则完成如客户帐户和书籍订单的验证这样的任务。

数据访问层 Data Access

数据访问层为业务规则层提供数据服务。这一层是作为 Duwamish.sln 解决方案文件中的 DataAccess 项目实现的。

 

除了上述四个逻辑层外,Duwamish 7.0 还包含封装在 Duwamish.sln 解决方案文件中的 Common 项目内的共享函数。“通用”(Common) 层包含用于在各层间传递信息的数据集。Common 项目还包含 Duwamish.sln 解决方案文件中的 SystemFramework 项目内的应用程序配置和跟踪类。

 

2,各个逻辑层之间的关系图(FROM MSDN)及其调用Sequeance图示例:


下面是Categories.aspx web页面获取CategoryDescription的整个调用过程。

1)实例化ProductSystem对象

2)调用ProductSystemGetCategories()方法

3)检测参数的合法性

4)创建Categories::DataAccess对象实例

5)返回上述对象

6)调用Categories::DataAccess对象的GetCategories()方法

7)创建CategoryData::Common对象实例

8)返回上述对象

9)返回CategoryData::Common对象实例,该实例中已经包含了需要的数据

10)返回CategoryData::Common对象实例给web/Client

11)检测数据的合法性

12)读取并显示结果:CategoryDescription




SystemFramework项目包含一些application需要的配置参数,ApplicationLog日志类和ApplicationAssert参数校验类。SystemFramework项目为所有其他的项目所引用。

 

Common项目包含了用于在各层间传递信息的数据集,如上述的CategoryData继承System.Data.DataSet,既不是所谓的typed DataSet,也不是一般的DataSet,不过简单实用,这是基于.Net Remoting开发分布式系统用来tiertier之间交互数据的一种方法。Common项目也被其他的项目引用,SystemFramework项目除外。

 

BusinessFacade项目中所有的Classes继承MarshalByRefObject class,显然是让准备将BusinessFacade tier部署为Remote Objects。不过,实际上默认这里并没有将其部署为Remote ObjectsWeb层仍然调用本地对象(《Duwamish部署方案篇》将分析这个问题)。

 

3Summary

 

在开发基于.Net Framework企业级分布式系统时,上述架构值得推荐,但也并非完美无暇,实际上存在一些值得改进的地方。显然,不可能一个范例适合所有的实际情况么,要求太苛刻了。其实,Enterprise Samples中的另外一个范例Fitch and Mather 7.0,其架构和Duwamish就有些不同了。

 

如果是开发本地的系统,就不要模仿Duwamish架构(看看上面获取CategoryDescription调用过程就知道了,太费劲。),如Business FacadeBusiness RulesClasses应采用fine-grained interface设计,层与层之间的交互参数也不必全部采用DataSet,适当的时候采用setter/getter就可以了,这样不仅可以提高开发效率,而且有助于提高performance, maintainability and reusability

 

 

References:

1, 卢彦, Duwamish深入剖析-结构篇, http://www.microsoft.com/china/community/program/originalarticles/TechDoc/duwamish.mspx

2, MSDN, Duwamish

posted on 2004-10-29 03:21 Rickie 阅读(12560) 评论(15)  编辑 收藏 所属分类: 8.架构及模式9.企业级案例分析

评论

#1楼  2004-10-29 08:31 caca      
最近看Duwamish的原代码,希望前辈指教.
  回复  引用  查看    

#2楼 [楼主] 2004-10-29 09:59 Rickie      
caca, 不用客气, 叫我- Rickie-吧.
  回复  引用  查看    

#3楼  2004-12-23 16:20 hlh [未注册用户]
最近在学习Duwamish,他可以运行?如何运行?运行他必须安装sqlserver?
  回复  引用    

#4楼 [楼主] 2004-12-24 00:45 Rickie      
You need install Duwamish at first.
*
Duwamish 7.0 is located in the following URL.
C:\Program Files\Microsoft Visual Studio .NET 2003\Enterprise Samples\Duwamish 7.0 CS

Then you can run it using VS.NET 2003.
  回复  引用  查看    

#5楼  2005-01-17 12:55 Kingson [未注册用户]
我想用Access数据库代替,SQL server,但问题出现了:
@"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=""D:\db2.mdb"";Jet OLEDB:Engine Type=5;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1";
这是Web.config中的Duwamish.DataAccess.ConnectionString,导致了一些异常,说是数据库被独占,还有说是不能用"。
  回复  引用    

为什么总感觉似懂非懂。。。总是迈不进去那个门槛呢?
  回复  引用    

#7楼  2005-04-17 01:40 Jinglecat [未注册用户]
刚刚发现VS.net自带了这么好的东东,正在研究,看了Rickee与卢谚的分析,受益破多,Thx
  回复  引用    

#8楼  2005-05-11 08:29 曹金勤 [未注册用户]
我刚刚学不知道是不是好用了期待着了
  回复  引用    

真的非常感謝Rickee与卢谚的分析,受益非淺。
  回复  引用    

VS.net 感觉真的是个好东西,用了一段时间后才知道好处多多了!Duwamish更是其中的宝贝,里面的东西好好的研究下对学好.net的架构我想很有帮助了!以后继续期待着更多的好文章!
  回复  引用    

#11楼  2005-11-03 03:26 Chark      
支持, 希望还有类似的结构分析文章~

  回复  引用  查看    

#12楼  2007-03-27 15:03 Afrey [未注册用户]
请问在VS2005中有没有类似的例子?怎么找?
  回复  引用    

#13楼  2007-03-30 17:37 ilahsa [未注册用户]
我的问题和Afrey 一样,05 中有没有类似的例子
  回复  引用    

#14楼  2008-05-23 14:19 阿友s [未注册用户]
Duwamish 是VS2003写的呀。、有没有2005写的呀
  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2004-11-01 05:16 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: