分享下一些架构设计方面的经验:
1. 什么是架构?
盖一个小楼,其架构简单的说是计算梁和柱子的长度,面积,体积,力度,最大荷载和数量等,那么程序的架构是不是也可以理解成接口,类,各种数据类型,算法之间的仓库呢? 以这个概念为引子,下面详细的说明程序的架构是怎么做起来的.
2.设计架构之前,架构师一定是要先了解需求的。
3.从需求分析中,就会设计出第一个蓝图-----该架构该如何分层.
有人会问,我们不都是采用流行的3层架构或3层半架构嘛? 表现层,业务逻辑层,数据层,web service这样的架构是应用于web开发,一些rich client程序和form程序由于业务需求不同,完全不需要什么表现层或是web service. 有些架构的分层中还涉及到对产品抽象层,启动层,甚至我觉得可以为做代理做一层,为monitor(监视)做一层。总之,没有绝对的框架,都是随着需求的深入而不断改进的。
4.分层后,各层之间是有依赖顺序的。
避免层之间互相引用过多。多引用一层,就意味着引用层可能会引来不必要在此层实现的职责,替被引用层完成本该由它来做的事。之所以分层,就是为了职责明确,各层做各层的事。所以在添加引用的时候,要小心是否真的需要引用这个命名空间。
5.需求里面肯定有一个需要反复操作的对象,那么架构里面,同样也会有一个抽象的对象来对应。对于这种对象,在架构上一般是要多关照的。我一般会参与这种方式: 定一个接口,然后再定义一个抽象类,抽象类来实现这个接口,然后可以用有抽象层次子类来继承这个抽象类。这样做除了一般的面象对象的好处外,可以很大限度的封装变化并减少代码冗余,很容易扩展。这当然根据需求的要求,对于复杂的对象,可以采用这种方式来封装抽象。
解释下为什么对大限度的封装变化:主要归功于使用了接口,并把接口做为最base的那一层。定义一个对象的行为和属性,目前最胜任的就是接口了;如果用抽象类,那么接下来实现其的子类就只能单继承,这样就受限制了。往往,代码改的对大的地方,通常都牵涉到业务的核心对象,所以把变化封装起来。
解释下为什么减少代码冗余:因为有抽象类来实现这个接口,所以该抽象类的子类和孙子类们可以不用实现接口里的全部方法。
解释下为什么容易扩展:由于又有接口又有抽象类和孙子们,无论是给接口赋予特性还是给接口再添加接口成员,都容易实现,而且还有很多层抽象层次,想在哪层添加什么行为,应用何种设计模式,基本上都能满足。
6.接下来,在设计中,该考虑各种对象的相互关系和方法的参数,返回类型的定义。
如果这些都能 定义好,那么在修改设计时就能轻松愉快了;如果不那么理想,就需要这些方法能够重载。
7.选择合适的数据类型是衡量一个架构的标准之一。一般这些数据类型就够用:List<T>, array[], Queue, Stack, 键值对. 再复杂点,就是这些数据类型组织在一起,比如把String, Queue, class的实例放到数组或键值对里。如果对于一些复杂的业务,比如有N层结构的数据,而且有从属关系, 那么用XML来表达更合适。因为这样可以方便准确易懂,而且能适应未来的变化. 这是用Hashtable, List等等不容易做到的。
8.算法。按照程序逻辑的步骤而写的算法也是算法,对程序逻辑抽象后的算法也是算法,当然第二种更好点。对于该怎样写出个好算法有3个好建议, 1是应用面向对象的思想,2是透过现象看本质,3是参考和借鉴别人的,因为毕竟一个人的思想难免会有局限性,所以为什么要有头脑风暴呢。
9.在架构设计里面,容易发生变化的地方是原来用一个变量来表达,后来需求改变,需要用一个数组或队列或其他什么数据结构来表达了,
这样在流程上,影响上就不小,可能会改动很多的代码。 这是我深刻体会到的。原来想象不到 这里居然会改变,所以开始设计的时候就简单的用个变量来表达。
10.最后的一点感受是需要不断的重构,思考,来完善架构。
最后,恳求大家的批评与不同的意见,欢迎拍砖和砸鸡蛋。让我们共同改进提高我们的方法论。
Peace!
分享到:
相关推荐
让LoadRunner再次走下神坛,详细讲述loadrunner
IMS走下神坛IMS网络架构解读(培训版).pptx
IMS走下神坛-IMS网络架构解读(培训版).pptx
走下神坛的内存调试器--定位多线程内存越界问题实践总结.pdf
让Quality Center走下神坛—测试管理工具QCALM和RQM、Jira 、TP、SCTM大PK
Loadrunner无疑是一个强大有力的压力测试工具。它的脚本可以录制生成,自动关联;测试场景可以面向指标,多方监控;测试结果图表显示,拆分组合。相信有人这样想象过:拿着一张性能指标标准列表和测试数据相比较,...
业界公认IMS是下一代的核心网。...2003年为促进NGN的销售,NGN产品部成功策划了《NGN走下神坛》消除了大家对NGN的神秘感。IMS营销支持部推出本套胶片,是作为其序列之二,目的也是为了消除IMS神秘感,帮助大家理解IMS。
走下神坛的内存调试器--定位多线程内存越界问题实践总结[整理].pdf
时代造梦 新能源汽车走上神坛.pdf
90后创业者跌下神坛调查报告现状.doc
Google正式推出Dart语言,欲将Javascript赶下神坛.docx
最近定位了在一个多线程服务器程序(OceanBase MergeServer)中,一个线程非法篡改另一个线程的内存而导致程序core掉的问题。定位这个问题花了整整一周的时间,期间历经曲折,尝试了各种内存调试的办法。...
移动互联网,地瓜今天偶然在艾瑞网上看到一篇题为《移动产业崛起或将谷歌搜索拖下神坛》的文章,大概意思是认为谷歌的搜索业务已达到天花板,而在移动互联网中营收并不明显。恰好,另一则消息,百度李彦宏近日在中欧...
初中语文文学讨论现当代文学余秋雨喻古远清梦游古远清称余正向神坛狂奔
AMD皓龙处理器的问世具有里程碑式的意义。它以X86通用处理器的低成本64位计算和专用处理器的性能,让高性能计算走下神坛,让X68处理器可以进入气象应用领域。
啰嗦点:众所周知wp的生态圈相对与有些系统较差,各位需努力,诺基亚走下神坛,wp要走上神坛,顶一下哈。 wp/ios系统类:运行软件,可承载本运行环境下的任何软件,如果新增一个系统,软件就要多做一个系统的版本 ...
安普威视的视频采集卡驱动和监控软件,有需要的可以直接下载。
Spring IOC Aop 学习资料 ppt
使得虚拟化技术在x86平台快速发展起来1999年,VMware针对x86平台推出了第一款商业虚拟化软件VMware Workstation,从此,虚拟化技术终于走下了大型机的神坛,开启了虚拟化技术的x86时代发展期(上世纪70~90年代)...