我也质疑下petshop

很多人都研究过petshop,我开始认识分层架构也是从研究这个petshop开始的。但是我发现很多人一谈三层架构就是

petshop那一套东西。实体类,DAL,BLL那一套东西。首先我不否认petshop这个架构整体的设计的合理性。但是这个合理性也是在一

定的项目环境下来说的。我觉得petshop这个架构只适合比较小的项目。系统的大部分需求只是对数据库的CRUD操作。而且业务逻辑

变化变化可能性很小的情况。

看过企业架构模式的应该知道。Petshop这个业务逻辑层采用的是表模块(table module),一个表对应一个类,负责这个表

相关的业务逻辑。数据访问层是表入口(table gateway),也是一个表对一个类,负责这个表的所有crud操作。还定义了实体类用

来保存数据库中取出的数据,用来在各层间传递。这种设计数据和行为分别放到了不同的类中。这个确实违背了oo的原则(数据和

数据相关的行为应该放到一起).业务逻辑层中业务逻辑操作类还都是静态方法。

从以上分析可以看出这个架构的一大隐患就是把自己弄的和oo保持了很远的距离。首先是行为和数据的分离。再者就是业务逻辑类

中的静态方法。这些都让oo的核心特性,继承和多态没办法应用。没了oo,设计模式中那些封装变化点的手法也就派不上用处了。

做企业应用的一定都有体会,变化那个快啊!唯一不变的就是变化。想给petshop想几个需求变化来说明这个架构不适合复杂业务逻

辑项目,还真是不容易。干脆就拿我现在面对的项目说事吧。这个是我们公司的网站。主要是卖我们公司的产品。基本的业务流程是

,用户填写一些和产品相关的信息。联系人,邮箱,地址等等。然后处理订单的流程如下。1.根据用户选择的产品做不同的验证(

因为不同产品的需要的验证的数据项和验证规则都不一样)。2.根据不同的产品计算价格3根据不同的产品调用库存系统接口.(主

要是传递的参数不一样)。4.根据不同产品的保存订单信息和产品信息。目前系统的设计基本这样的。设计使用事务脚本来处理这个流程的。基本上每个环节都对应一

个方法。Buy方法调用依次调用validate,produce,saveorder方法。然后每个方法会在内部用switch和if来判断是那个产品然后做出相应的处理。很难相信这种代

码能运行这么长的时间。由于我们公司产品线变化非常的频繁。所以基本上每添加新的产品都要修改所有以上方法。由于频繁的修

改导致了代码的严重可读性差。每个方法都愈来越长,if语句愈来愈诡异。有些下线的产品代码其实该清除的。 说了这么多我觉得

最大的缺陷是组织业务逻辑的方法不合适。我现在被安排维护这些代码。每改一个新需求,我都心里发虚啊。怕自己弄错了if块。

还好领导们也认为旧的系统维护效率太低了。要求重新设计系统。我觉得应该把业务逻辑使用领域模型来组织。每个行为

不一样的产品都应该有自己的类。然后对产品建立一个类体系。抽象出每个环节和具体某个产品相关的行为到一个类中。比如

ProductA应该有Validate,GetProduceParameter,等等,这几个方法。来实现验证自己,获取库存调用接口参数,和获取订单相关信

息的方法。这样buy方法就可以把这些行为委托给具体的产品类。自己就负责流程管理就行了。以后新产品来了,就对新产品建立个

新类。这样这个业务层也就对修改封闭对扩展开放了。这个没oo确实很难办。理想总是很美好的。几个项目主管和其他同事推崇的

架构方案居然是和petshop一样的架构。Petshop组织业务逻辑的方式虽说比事务脚本好了点。但是它的缺点也是很多啊。就我知道

的,这个架构对数据库表耦合的很紧。基本都是实体类和表一一对应,然后字段和属性也一致。网上很多生成实体类的方法也都是

根据数据库表的元数据信息自动生成的。虽说弄了三层但是那一层也没逃脱对数据库结构的依赖。对数据库结构的变动会导致所有

层的修改。另外 petshop的那个抽象工厂用的也有点多余把。Ado.net2.0已经实现了这个模式,我们在数据访问层直接用

DBConnection,DBCommond这些抽象类就行了。所以我觉得这个petshop纯粹是个演示架构和微软技术的一个花架子。具体到每个不同

的项目,都有自己的项目环境。生搬硬套petshop也是很stupid.说实在的我认为对于petshop那样的项目需求也根本费不上petshop

那样的架构。

我心目中一个复杂企业应用的架构

时间: 2024-10-16 10:21:21

我也质疑下petshop的相关文章

.NET 三层架构的简单规划

今天心血来潮简单看了下petshop4.0的源代码,他就是用三层架构来实现的.现在简单的做下总结. 首先我们先看下petshop的三层架构. 1 WEB 表示层 2 Model 业务实体 3 BLL 业务逻辑层 4 DALFactory 数据层的抽象工厂 5 IDAL 数据访问层接口定义 6 SQLServerDAL SQLServer数据访问层 7 OracleDAL Oracle数据访问层 8 DBUtility 数据库访问组件基础类 这个是这个项目和数据相关的类库. 以上两张是业务逻辑和数

金融杠杆游戏下的你

贪婪,是人性的弱点?没错,因为生命是有限的,人总希望在有限的生命历程中获得更多:享乐绝不能等待,这是掌控生命的基因的渴望:懒惰,是人性的弱点?不是,懒惰只是人的生理性本能,珍惜能量也同样是基因进化中的最优选择,对于人的大脑来说更是如此,如果大脑将所有感知的信息都无遗漏的处理,脑袋估计得冒烟,而且需要时时都都进食:(如果想了解大脑的处理机制,可以去看一些相关的研究性资料).资源是有限的,而人的能力更是有限的.这也是不争的事实. 好了,我们做一些选择,简单的选择,而且这种选择需遵循自己的内心:如果你

debian系统下安装shh服务

它是什么?? SSH 为 Secure Shell 的缩写,简单地说,SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题. Openssh 为这种协议的实现或实体,我们可以通过 openssh 这个开源的软件进行远程登录. 为什么要用它? 由于我笔记本上装的为debian系统,而台式机为windows系统并且双屏,再把我的笔记本记到桌子上真的没有多少地方了,并且操作笔记本时还要扭

在现代教育观念下数学教学设计的变化

随着互联网技术和计算机技术的快速发展,多媒体技术也逐渐应用在数学教学当中.随着教学模式的改变,教学方法也需要从现代教育观念出发,不仅要能够运用好多媒体等现代教学设备,而且也要具有现代的教育手段和意识,要转变传统的教学观念,以学生为中心,推动数学教学的进步. 1. 数学教学与现代教育观融合的现状分析 目前,我国很多地区的学校,都已经配备了多媒体教学设备,这跟我国经济水平的提高和现代教育技术的发展有着很大的关系.在数学教学当中,也出现了很多现代教育技术,比如一些应用计算器.几何画板和一些教学软件等.

是热爱不是质疑

每次想写些东西,都会搞得自己很矛盾,都会问清自己脑子里到底是怎么想的,有什么依据,有什么能力,不断质疑着自己,可能写下来和简单地想是完全不同的两回事,写下来铁证如山,当自己之后没有按照写下来的去完成实现时,会有很大的挫败感:但是只是简单的想,之后没有实现也不会刻意去说自己怎么怎么样,一切随风而逝. 最近看了柴静的看见,深深触动,人呢应该用心眼去看这个世界,更多地不是去给一件事一个人下结论,而是去走近他认识他感受他.很想像那些记者一样去采访不同的人,去感受不同的生活,融入到他们的世界里,体验不同的

二维码收礼金:新潮与传统人情碰撞下的道德困惑

自互联网诞生以来,其对社会架构.人性.道德.规则等带来的冲击和颠覆是前所未有的.这其中,既有好的,也有坏的.而且好坏也是在转换之中--经过时间的沉淀,当初不被理解的新鲜事物却成为生活的一部分,当初看似风靡一时的却最终被淘汰.新事物的出现之后表现地如此具有冲击力,也让不同年龄.不同认知的人群产生不同想法. 就在近日,北京朝阳区的一个婚礼现场,伴娘在脖子上挂支付宝的收钱码收礼金,却惨遭新娘婆婆的"白眼相待".这一事件迅速走红网络,二维码收礼金是否合适引发争议.年轻人认为挺好玩,很新潮,中老

ASP.NET下MVC设计模式的实现

[转载]MVC架构在Asp.net中的应用和实现 转载自:http://www.cnblogs.com/baiye7223725/archive/2007/06/07/775390.aspx 摘要:本文主要论述了MVC架构的原理.优缺点以及MVC所能为Web应用带来的好处.并以“成都市信息化资产管理系统”框架设计为例,详细介绍其在Asp.net环境下的具体实现.旨在帮助Web设计开发者更好的了解和掌握MVC,合理利用MVC构建优秀的Web应用. 关键字:MVC.视图.控制器.模型.Asp.net

八百元八核的服务器?二手服务器(工作站)搭建指南(下)

本文分成两部分,上一部分传送门:<八百元八核的服务器?二手服务器搭建指南> 在上一部分我们已经学习了搭建二手服务器的基础知识,这部分,我们将深入学习各种配件的详细参数.选择适合的配置.学习搭建八百元八核的服务器. 不过,在我们开始之前,让我先对上一部分中,同学们提出的问题做一下回答. 第一是最多人质疑的一点:功耗和噪音问题. 我估计这里大家指的"功耗"应该是"功耗性能比".受限于老一代的制程,1366的功耗性能比是较低的,而到了2011 V2,事实上已经

从多地疫苗被质疑事件 看预防接种互联网化之急

最近发生在郑州.上海.福州.重庆等地的疫苗事件,大部分是因"疑似被掉包""质疑疫苗质量"等问题引起,而也这在一定程度上暴露出社区医院在存放.监管.接种过程中的种种问题.疫苗编码.儿童编码.接种医生编码的"三码合一"和移动预防接种平台APP,甚至专业医疗咨询APP也成为了被关注的焦点.预防接种的互联网化,已经迫在眉睫. 看不到的单子 看得到的网 在传统的预防接种过程中,家长手中往往掌握的是接种卡.接种证等.虽然能看到孩子历次接种的疫苗类型和情况,但