把方案一简再简

在设计庞杂体系时应用此原则简化计划的规模、设计和实行。在(编程或者盘算)资本有限的情形下设计庞杂体系或产物时应用。

有时我们会告知客户,对于该原则,要问3个“若何”,即若何简化规模,若何简化设计,若何简化实行。

1.若何简化规模

这个问题的谜底是:经常运用帕累托轨则(也称为80-20轨则)。80%的结果来自于20%的工作吗?对于我们的情形,直接问“80%6的收入来自于20%的功效吗”。少做(只做20%的工作)多得(获得80%的收益你的开辟组就能有时光做其他的工作了。假如去除产物中不需要的功效,那么你的工作效力就能进步5倍,产物的庞杂度也会年夜年夜减小。假如只有1/5的功效,那么毫无疑问,功效之间的依附关系就会削减,从而扩大起来更轻易,扩大成本也会更低。此外,节俭下来的809%的时光既可以用于开辟新产物,也可以用于提前斟酌产物未来的扩大需求。

不止是我们在思虑若何在削减不需要功效的同时保存重要功效。37signals中的许多人对此办法都很拥戴,他们在本身的书《重来》(Rework2)和博客“YouCanAlwaysDoLess”(你可以做得少一点) 中都评论辩论过削减工作的需要性和所带来的利益。事实上,“最小可行产物”这一概念是由EricReis提出,由MartyCagan流传开来的,它的根据是“用最小的尽力获得最有用的客户需求”这一理念。这种迅速开辟办法使我们可以快速地宣布简略且轻易扩大的产物。如斯我们的公司就可以或许获得更年夜的产物临盆力(公司可扩大性),把时光用于构建少数有更高可扩大性的产物上。经由过程简化规模,我们将具有更高的盘算才能,同时工作得更少。

2.若何简化设计

规模缩小后,简化实行的工作就变得轻易了。简化设计与过度设计的庞杂度慎密相干。削减庞杂度是删除工作中不需要的部门,而简化则是要找到一条捷径。在原则1中举过一个例子,把se1e1lct(年夜)fromschema_name.tabe_name改为为select(co1umn)fromschemaname.tabe_name,只查询你须要的成果。简化设计的办法则建议我们起首看看要查询的信息是不是已经存在于当地资本(例如当地内存)中了。削减庞杂度是为了削减工作量,而简化设计是为了工作得更快更轻易。

假设我们要读一些源数据,对这些源数据中的中央令牌进行盘算,然后把这些令牌绑定起来。在很多情形下,这个假设中的每个动作都可以被分化成一系列办事。事实上,这种办法和风行的Map-Reduce算法采取的办法相似。这种办法并不外度庞杂,所以不违反原则。然则假如我们知道要读的文件很小,不须要跨文件绑定令牌,那么开辟一个简略的整体式的运用,比把它分化为多个办事更合理。再看看前面的打卡体系的例子,假如目标只是盘算每个员工的工作时长,那么用多个克隆的整体式运用读打卡体系的队列并履行盘算则更合理。简而言之,简化设计这一步会请求我们用一种轻易懂得、低成本、可扩大的方法来完成工作。

3.若何简化实行

最后,来看看实行的问题。与原则2(实现可扩大性的D-I-D办法)致,这里的实行界说为解决计划的现实编码工作。此日时要面对的问题是用递清偿是轮回更合理?应当界说一个固定年夜小的数组,照样应当在须要时动态分派内存?应当开辟一个解决计划,照样应当采取开源的解决计划,照样应当购置一个解决计划?这些问题有一个雷同的考量,即若何应用他人的经验和现有的解决计划来简化我们的实行。

斟酌到我们弗成能事事精晓,所以起首应当查查找能知足我们需求的、被普遍采取的开源解决计划或者第三方解决计划。假如没有如许的计划,应当在公司内部讯问是否有人已经开辟了能解决该问题的可扩大计划。假如没有专用的解决计划,那么应当再从外部寻找,是否有人描写过解决该问题的可扩大办法,并且我们可以正当地复制或模拟?只有当这三种前提都不成立时,才应当测验考试本身解决该问题。最简略的网站扶植实行办法都是已经被实行过且被证实是可扩大的办法。

相關文章: