[从架构到设计]第一回:设计,应该多一点
[从架构到设计]
第一回:设计,应该多一点
发布日期:2007.8.15 作者:Anytao
©2007 Anytao.com ,原创作品,转贴请注明作者和出处。
设计就像是转魔方,你必须面面俱到。
1. 引言
anytao开始想尝试尝试写点设计的东西了,只所以有了这个“突如其来”的想法,原因其实很简单:因为对设计、架构、分层、模式,我很陌生。因为陌生,所以接触,因为接触,所以随笔。系列之构思就这么诞生了。因此,这个系列是个方法论,是个杂文集,也是个见证史。我不期望能收获多少掌声,但求能保持更多交流。作为技术的狂热追求者,我始终认为两件事情是技术的立命之本:
- 底层、框架,因此有了[你必须知道的.NET]系列,以追求技术细节
- 设计、架构,因此有了[从架构到设计]系列,以追求技术宏观
因为,你会发现在日新月异,纷繁复杂的技术领域里,一切都在变,一切都在赶,我们拼命的狂追,换来一片的豪赌。唯一不变的,一是底层,二是设计。所以我只关注这两个,也只关注这两个,这是我认为的学习方法论中的第一守则:确定不变的追求方向。
那么这个系列将关注些什么方向呢?
- Architecture---架构
- Method&Process---设计方法与设计过程
- OO--面向对象
- Design Pattern---设计模式
- Learning Method---学习方法论
2. 从架构到设计
当年,petshop作为.NET和J2EE两个派别之争的产物,坐在了潮流的风口上,时间已然过去,当时硝烟早已消失。我们庆幸的是petshop一路走来,从1.0到4.0,综观其设计的脉搏,能够感受到架构的日渐成熟和演变,这是技术之争留给我们最大的看点。
(图片来源:MSDN)
从1.0的简单3层BS系统架构,到4.0实现较复杂的分层结构,同时引入数据缓存、异步处理机制,petshop成为典型的分层结构的代表为架构设计的学习提供了良好的资源与素材。从历史的遗迹中,我们挖掘到的是什么?
- 思想:分层架构,3层也好,7层也罢。根据的是具体的系统需求而定,但是基本的表示层、业务逻辑层和数据访问层的有机划分,是一种导向。而由分层带来的性能影响,可以通过数据缓存、异步处理机制来弥补。
- 方法:模式就是方法,petshop中就不乏模式的大量应用与技巧,抽象工厂模式完成对象创建;策略模式封装业务行为。
- 策略:面向接口的设计,剥离了层与层之间的强耦合,使得各个模块保持相对的独立性,体现了封装变化的基本思想。
- 技巧:表现层中以masterpage来实现对页面的控制,既省时又省力。
- 缺陷:没有应用ORM,数据和实体的分离不够彻底。希望在5.0中有更好的方案。
没有一成不变的设计,也没有一成不变的架构。方案是永远随着需求,随着技术而不断重构,设计之美就体现在不断的否定与自我否定中。本系列不是讨论petshop的专题,这方面的讨论已经很多了,我们没有必要再造轮子。因此,更关注如何,怎样和思想,是这里的讨论。
那么,设计、架构应该从哪儿入手,又如何进行?面向对象的原则又是什么?设计模式又如何融入到我们的架构体系中?这一系列的问题,我想说可能根本没有答案,而确有方法。本系列就力图从方法的角度入手,以并非专业又并非经验的视角来阐释如何以菜鸟的立场来“空谈”设计。因为,你不能说设计只是架构师的事儿,否则满篇的代码又如何体现艺术之美呢?作为菜鸟, 我们少了经验,但是多了思考,因此对架构、对设计、对模式的探索,应该从一定的方法做起,这是本文和本系列试图达到的目标。
作者力图以例小心求证设计,以图来大胆阐释方法。例如,软件设计的分离点应该如何来考虑呢?
- 首先,分层思想是从职责角度对架构进行了约束,表现层、逻辑层、数据层各负其责,层与层之间以接口进行信息交互,减少耦合度。
- 其次,框架和通用组件则是从通用性角度提高了系统复用并减少耦合度,例如,在一个应用系统中,.NET Framework是技术通用组件,提供了系统开发数以千万计类,而系统中的进度控制、消息控制和异常处理可以开发为专用的模块,作为领域通用组件,然后在此基础上再实现具体的业务需求。
- 最后,模块化思想则是从功能点对系统进行了分离与封装。一个大型的系统,一定是分成多个功能模块进行的开发,每个子模块甚至也有必要进行架构设计和粒度划分,这主要依赖与其在系统中的复杂度和重要度。核心的子系统设计,最好落实到具体的类设计,对粒度的把握也是架构设计值得思考的话题。
分层角度,框架基础,功能划分,一个系统设计要综合考虑这些因素。可能还不止这些,也可能只是其中的一点,具体的架构要看具体的需求。然而探求架构和设计方法的时候,我们要把握基本的方法和思路去迎合前人总结的经验,也叫科学。
以上述思路来回顾petshop 4.0的架构,我们很明显的感受到,良好的设计正是巧妙的耦合了架构设计中的诸多因素,提出了近乎完美的方案。分层角度来看,在petshop中自不必说,明显的三层架构体现了良好的系统分离与耦合;通用角度来看,.NET Framework作为技术通用组件,提供了系统实现的基本技术基础,而对Profile和Membership的分离,则体现了领域通用部分的价值;模块角度来看,由于petshop本身的业务需求比较简单,因此模块划分不够明显,但是对Order的处理可以看作简单的业务模块了。而其他方面,例如设计模式,面向接口开发的技术,也同样体现在petshop的大框架中,让我们受益非浅。
3. 结论
从架构到设计,漫游在一个技术而艺术的世界,一直是我的梦想。对技术的驾驭,不是看你了解多少细节,更重要是你控制了多少格局。架构设计就是一个控制格局的艺术,只有游刃有余的驾驭了如何将技术细节变成就轻驾熟的应用,才是设计的最高境界。届时,你会发现,原来技术可以更美的。所以,我要说,设计,应该多一点。
参考文献
(中国)温昱,软件架构设计
(USA)Geoffrey James,The Tao of Programming
[公告]
【CLR团队公告】活动公告、邀请函、团队纲领
【系列公告】你必须知道的.NET、从架构到设计
温故知新
©2007 Anytao.com
原创作品,转贴请注明作者和出处,留此信息。
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。
This posting is provided "AS IS" with no warranties, and confers no rights.
转载于:https://www.cnblogs.com/anytao/archive/2007/08/15/anytao_design_01.html
[从架构到设计]第一回:设计,应该多一点相关推荐
- 走向ASP.NET架构设计--第一章:走向设计
走向ASP.NET架构设计--第一章:走向设计 前言:很多做开发的人都在不断的摸索着,积极的学习,试图找出一条走向架构设计的成功法则.每当有人问起我们的职业,我们也常常在说:"软件设计&qu ...
- 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素
朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 [下载文本PDF进行阅读] 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得.助你在架构评审中过五关斩六将,助 ...
- 给 COLA 做减法:应用架构中的“弯弯绕设计”
简介:COLA 的主要目的是为应用架构提供一套简单的可以复制.可以理解.可以落地.可以控制复杂性的"指导和约束".在实践中作者发现 COLA 在简洁性上仍有不足,因此给 COLA ...
- 聊聊微服务架构中的多级缓存设计
大家好,我是不才陈某~ 今天我们来聊聊缓存这个话题,看看在微服务环境下如何设计有效的多级缓存架构.主要涉及三方面内容: Web 应用的客户端缓存: 应用层静态资源缓存: 服务层多级缓存. 首先,咱们先 ...
- 数据库架构设计——分布式数据库设计
摘要 现在互联网应用已经普及,数据量不断增大.对淘宝.美团.百度等互联网业务来说,传统单实例数据库很难支撑其性能和存储的要求,所以分布式架构得到了很大发展.一定要认识到数据库技术正在经历一场较大的变革 ...
- bs架构 mysql_基于BS架构OA办公系统的设计(PHP,MySQL)(三人组)(含录像)
基于BS架构OA办公系统的设计(,MySQL)(三人组)(含录像)(毕业论文13000字,程序代码,MySQL数据库,答辩PPT) 系统模块划分 企业部门管理系统(以管理员部分为核心)从功能上划分为5 ...
- 微服务架构设计基础之领域驱动设计
背景 微服务现在可以说是软件研发领域无人不提的话题,然而业界流行的对比多数都是所谓的Monolithic(单体应用),而大量的系统在十几年前都已经是以SOA(面向服务架构)为基础的分布式系统了,那么微 ...
- 关于系统架构你不知道的那些事-架构设计流程:设计备选方案
关于系统架构你不知道的那些事-架构设计流程:设计备选方案 前言 架构设计第 2 步:设计备选方案 第一种常见的错误:设计最优秀的方案. 第二种常见的错误:只做一个方案. 第三种常见的错误:备选方案过于 ...
- 框架设计--第一章 Spring的基本应用--习题答案
摘要:微信搜索[三桥君] 课程介绍:"框架技术"是软件工程专业的核心课程,是本专业限选课,是Java 应用开发课程,是本专业学生就业的主要方向. 说明:框架设计其他章节的习题答案也 ...
最新文章
- 数字图像处理(Digital image processing)笔记
- JAVA Web day02--- Android小白的第二天学习笔记
- JavaScript---事件监听
- python适配器模式角色_python设计模式-适配器模式
- 对volley的初步分析第一篇
- 还有 2 天,这场大咖云集的启智开发者大会即将启动!
- opengl光线追踪的程序_【PathTracing】实时光线追踪和BSSRDF的那些事
- 应用程序按照以下顺序执行由 global.asax 文件中定义的模块或用户代码处理的事件...
- 关注可视化H5设计(待补充……)
- 职场通病之 - 眼里揉不得沙子
- 又一个程序员倒下-程序员防猝死指南
- 判定两个点是否在一条直线的同一侧_帮帮学堂丨高中物理的常用方法、题型特点及应用注意点!建议收藏!...
- 托宾Q数据-沪深A股上市公司(含行业名称、代码等指标)2003-2020
- 随笔-你买罐头干什么
- UVA 10118-Free Candies
- [note] 微电子学概论(二) PN结 MOS和MOSFET
- 网易云音乐(一)爬取全部歌手及歌手id
- kicad最小布线宽度默认是多少_PCB布线设计,提高有一套完整的方法
- Java中进行日期先后顺序的比较
- 小程序获取input文本框的值