1 化简方程
任何大问题,只要分拆方法正确,都不过是一系列有待解决的小问题的集合。
1.1 原则1 :不要过度设计
- 复杂的解决方案实施成本高,而且会产生大量长期成本。
- 过度复杂的系统会限制扩展能力。简单的系统更容易维护和扩展,且成本更低。
- 过度设计分为两大类。一类是指设计与实现超出了有用需求的产品。
- 范围蔓延,或者最初产品定义和最初的产品发布之间的范围差异,是过度设计的一种表现。
- 过度设计的第二类表现是使系统过度复杂,或者用复杂的来实现它。简而言之,就是要花费过大的力气去完成一项工作,或者让用户花费过大的力气去完成一项任务,或者让程序员花费过大的力气去理解一个功能。
- 最后一种情况,就是软件复杂得让其他程序员难以理解。衡量一个伟大程序员的真正标准,是他多快把一个复杂的问题简化,多快能开发出一个既容易理解,又容易维护的解决方案。
1.2 原则2 :设计时就考虑扩展性
- 提前考虑如何扩展解决方案,在实际需要前大概一个月(编程)实现它,或者在客户急需时提前几天实现它,会给开发团队节省很多金钱和时间。
1.3 原则3 :把方案一减再减
- 只是着重于“不要复杂”不能解决需求、故事及事件编排和真正的实施带来的各种问题。
- 在产品开发的各个方面都要简化需求。
- 如何简化范围
- 经常应用帕累托法则(也称为80-20%法则)。
- You Can Always Do Less (你可以做得少一点)。
- 最小可行产品。用最小的努力得到最有效的客户需求。
- 如何简化设计
- 减少复杂度是为了减少工作量,而简化设计是为了工作得更快更容易。
- 简而言之,简化设计这一步会要求我们用一种容易理解、低成本、可扩展的方式来完成工作。
- 如何简化实施
- 最简单的实施方法,都是已经被实施过且被证明是可扩展的方法。
1.4 原则4 :减少DNS查询
- 浏览器限制了对每个服务器或代理的最大同时持续连接数。许多浏览器把最大连接数设置为6或者更大。
- 一个通用的原则是,页面上的DNS查找越少下载页面的性能越高。但是,把所有对象都放在一个域中也有不利的一面,在前面关于最大同时连接数的讨论中就暗示过这一点。
1.5 原则5 :尽可能减少对象
- 提高Web页面的性能,从而提高扩展性(为一个页面提供的对象少,就意味着服务器能够多服务几个页面)的最简单方法之一就是减少页面上的对象。
1.6 原则6 :使用同一品牌网络设备
- 不应该为了省点钱,就去应付时不时出现的互操作性和可用性问题。
- 不同品牌的网络设备可能会造成可用性和扩展性问题。最好只选择一个供应商。