`
cloudtech
  • 浏览: 4612586 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

软件架构经验总结

 
阅读更多

任何一款软件,从无到有,从初级到完善,一般都会经历一个漫长的过程。在这个过程当中,架构师的水平和软件体系架构本身的灵活性,就会处于一个很关键的位置。太多的软件,因为架构的问题,造成产品发布日期延迟,或者项目交付工期延迟,给测试、实施、售后等工作等造成一系列的问题。

还有些情况是因为在同期有很多种竞争技术,由于架构师选择了其中一种技术,而这种技术,在长期发展过程当中,败给了其他的竞争技术,使得基于这种技术的产品不得不重新开发。比如,我以前基于Java Swing做了一款工作流和SOA架构的产品,在世界500强的公司当中,很多都是我们这款产品的客户,客户对它的评价也相当高,它曾是公司很赚钱很核心的产品。但是Java Swing在跟EclipseSWT竞争过程中败下阵来,使得我们不得不基于Eclipse插件机制,重新开发了一套功能类似的产品,以方便以后升级。在这个转型过程当中的损失,是很难计算出来的。再比如,现在火热的移动平台开发,是选择Android平台,还是选择iPhone平台?是选择Symbian平台,还是选择Windows Mobile平台?也是一个很恼人的问题,架构师选错了平台,就可能给公司造成难以估算的影响。

而程序员本身,也会给架构师带来压力和困惑。例如:SSHSpringStrutsHibernate)架构流行很多年了,很多公司和程序员都拿它来开发,而把自己公司的不是基于以上开发框架的自主开发框架,称之为“山寨框架”(跟StrutsHibernateSpring比较起来)。他们一般信奉拿来主义,不重新发明“轮子”的理念深入人心。我自己面试过无数人,也曾被无数人面试,问到难度稍微大一些的问题,比如线程、Web服务器负载均衡以及Java垃圾回收机制等,一般都回答不出来,或者讲不明白,这就是程序员“重商主义”、“拿来主义”的弊端,只知道如何使用,对其原理一概不知。说实话,不查资料,很多我也不明白,也是只知道个大概。客观原因是平时很少使用,主观原因是自己的懒惰。我个人是非常不赞同“不重新发明轮子”这个理念的,不重新发明轮子,你就不知道这个轮子的架构机制。对很多问题的细节,被人问起来,也只能很含糊地说:也许大概可能是,不过恐怕不见得,其实这还是没有掌握。而这些机轮子本身,会用到缓存、多线程等很多需要深入研究的问题。弄明白了别人的轮子,那些很含糊的问题,一般也就解决了。

很多程序员,包括工作十几年的所谓老程序员,都自觉不自觉地遵循着某种理念,比如他会告诉你“Action只能调用一个Manager,所有与数据库打交道的地方,只能写到DAO层”,如果你不这么做,他就会告诉你,你的代码不是面向对象的,不友好的,是不符合某某设计模式的。还有的所谓很牛的程序员,用垒鸡窝和盖大厦,来标榜他的架构是多么多么符合所谓的范式和架构,或者遵循某大师的XP理论。可是他们都忘记了,我们编写程序代码的最根本的目的是什么?我们开发软件并不是为了让它面向对象化,或遵循某些设计模式,我们开发软件是为了解决问题。所谓为了以后的扩展或者10年之后的需求,你的架构到时候真的就不用做任何修改吗?我这么说的意思,不是鼓励大家不遵循任何开发的方法论,不做任何代码的约定,随意随心乱写,毕竟我们是一个团队作业,而不是自己一个人在根据自己的喜好开发个人软件。我的意思是说,我们不要迷信什么,山寨架构也好,官方架构也好,我们一定要根据自己项目的实际情况,加以改进,不要生搬硬套。

最后摘抄某大侠在dzone.comhttp://java.dzone.com/news/object-orientation-not-goal)一段原话做结尾:通常,当有些很精明的程序员对我的做法说三道四,却又根本不知道我是在解决什么问题时,我很苦恼。这就像是在说“我比你更知道你需要什么,所以我们不能用这个、那个工具/风格/架构”。但事实却是,什么样的工具或思路才是他们解决相应问题所需要的,这些精明的思想家并不比每个开发人员更清楚。做个类比,这极其类似那些精明的政治家宣传自己最知道人们究竟应该怎么活着……

本文摘自电子工业出版社出版的《B2B2C网上商城开发指南——基于SaaS和淘宝API开放平台》一书。本书由邢波涛、郭娟著。

相关文章:

新一代电子商务发展趋势

网上商城后台架构设计

购买链接:当当网 卓越网

分享到:
评论

相关推荐

    满满的干货!最新软件架构总结,根据业界大拿实战经验总结!

    只有今天免费,明天开始收积分了哈。这是最新软件架构总结,根据业界大拿实战经验总结,很实用的,希望对大家有帮助

    软件架构—组织原则与模式

    本书主要描述软件架构与软件组织之间的相互关系,依次介绍了作者根据多年管理经验和研究总结出的软件架构组织的VRAPS 5项原则——构想(Vision)、节奏(Rhythm)、预见(Anticipation)、协作(Partnering)和简化...

    最新软件架构总结,根据业界大拿实战经验总结!

    手慢无!软件架构师精品课程,速度领取!0基础学习,没有了解过也能看懂,总结精要知识点,快速捕捉行业动向!

    软件架构师应该知道的97件事总结

    设立软件架构专业为时尚早 控制项目规模 架构师不是演员,是管家 软件架构的道德责任 摩天大厦不可伸缩 混合开发的时代已经来临 性能至上 留意架构图里的空白区域 学习软件专业的行话 具体情境决定一切 侏儒、精灵、...

    软件架构设计系列总结

    一个软件架构师需要有广泛的软件理论知识和相应的经验来实施和管理软件产品的高级设计。软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、...

    软件架构组织原则与模式

    本书主要描述软件架构与软件组织之间的相互关系,依次介绍了作者根据多年管理经验和研究总结出的软件架构组织的VRAPS 5项原则——构想(Vision)、节奏(Rhythm)、预见(Anticipation)、协作(Partnering)和简化...

    开发实践&软件架构相关

    开发实践中的经验总结,在软件架构时需要考量的问题

    互联网时代的软件革命 SaaS架构设计

    国内第一本完整介绍SaaS应用设计的书籍。. 具有丰富SaaS实践经验的一线架构师的经验总结。.. 用创业故事贯穿全书,以一种活泼的风格来描述SaaS应用逐步成熟的过程。

    [一线架构师实践指南].温昱.扫描版

    本书从架构师经常遇到的困惑出发,总结软件架构设计中经常遇到的问题,提出“方法体系必然是软件业界未来发展的重大趋势”这一观点;之后,详细阐述了软件架构设计三个阶段(Pre-Architecture阶段、 Conceptual ...

    一种基于软件定义的通导遥一体化有效载荷架构设计

    卫星系统的发展趋势是多功能、网络化和智能化,集通信、情报侦察、目标探测预警、信息分发和信息...最后,结合在轨有效载荷研制经验,总结了基于软件定义的通导遥一体化有效载荷的关键技术,并对其应用前景进行了展望

    Serverless 架构 无服务器应用与AWS Lambda.pdf

    无服务器是软件架构世界中的热门新话题,它充分利用大量的云平台服务,让开发者只需关注核心业务逻辑的实现。同时,它按需分配和使用资源的运行方式,在降低基础设施成本的同时还能获得强大的弹性。 《Serverless...

    架构之美(中文清晰完整版)

    1.2 创建软件架构 19 1.3 架构结构 23 1.4 好的架构 27 1.5 美丽的架构 28 致谢 30 参考文献 31 第2章 两个系统的故事:现代软件神话 33 2.1 混乱大都市 34 2.2 设计之城 40 2.3 说明什么问题 47 2.4 轮到...

    一线架构师实践指南

    , 本书从架构师经常遇到的困惑出发,总结软件架构设计中经常遇到的问题,提出“方法体系必然是软件业界未来发展的重大趋势”这一观点;之后,详细阐述了软件架构设计三个阶段(Pre-Architecture阶段、 Conceptual ...

    架构之美(中文版)

    本书让最优秀的设计师和架构师来描述他们选择的软件架构,剥开架构的各层,展示他们如何让软件做到实现功能、可靠、易用、高效率、可维护、可移植和优雅。 目录 序 前言 5 第一部分 论架构 第1章 架构概述 13 1.1...

    系统架构师是怎样炼成的

    系统阐述高级软件系统架构师是怎么练成的,里面饱含高级工程师的经验精华和知识总结,值得下载一看!

    App后台开发运维和架构实践

    App后台开发运维和架构实践》通过阐述移动互联网中 App 后台开发的特点,梳理了 App 后台开发中会遇到的各个技术点,给出了生产环境常用软件的实战运维经验总结,剖析了常见 App 后台技术架构设计,为读者呈现一幅...

    放弃Dubbo,选择最流行的SpringCloud微服务架构实践与经验总结

    这篇文章给大家介绍我们使用SpringBoot/Cloud一年多的经验总结。在开始之前我们先介绍几个概念,什么是微服务,它的特点是什么?SpringBoot/Cloud都做了那些事情?他们三者之间又有什么关系?微服务的概念源于2014年3...

    设计模式 软件架构设计

    设计模式是经常遇到的设计问题的可再现的解决方案,设计模式是前辈将面向对象的特性发挥到极致的经验总结

Global site tag (gtag.js) - Google Analytics