如何才能根据需求编写代码
如果设计正确,它将永远持续下去。
![](https://i-blog.csdnimg.cn/blog_migrate/ffe0204cdfff3f98fa94413744f77c6c.png)
概括地说,每个项目可以分为六个阶段
· 热情
·幻灭
· 恐慌
· 寻找根本原因
·惩罚无辜者
·对非参与者的称赞和荣誉
“ 寻找根本原因 ”阶段非常累人,并且要求很高,尤其是当一个项目注定要失败时。 在这里,我们回顾一下出现严重错误的项目,并问自己:“ 发生了什么事 ?” 我们进行验尸,然后尝试将破碎的碎片放在一起,以解释我们是如何失败的。
然后我们提出类似的正当理由。
·要求不高( 客户不知道自己想要什么!!!)
·计划不力( 我们的项目经理搞砸了!!!)
·管理不善( 希望首席执行官能展示更多能力!!!)
原因还在继续……。
最后,我们抛出一个不错的PPT,为将来的项目提供“重大保证” ,从项目中“洗牌”两到三个资源,然后庄严地关闭一个令人痛苦的他妈的项目,以使每个人都感到“满意”。
但是在掩盖的整个过程中,我们方便地忽略了导致失败的最重要的单个因素
管理复杂性。
该软件变得如此复杂,以至于没有人知道它在做什么。 当任何一个项目到达某个人无法完全理解一个区域中代码更改的影响将如何影响其他任何区域的程度时,我们可以放心,该项目注定要失败。 该项目迟早会暂停。
由于设计糟糕,因此创建了一个复杂的项目。
正如艾琳·欧(Arene Au)正确说的。
“好的设计就像一台冰箱,当它工作时,没人注意到,但是当它不工作时,肯定会发臭。”
以下是一些很棒的设计原则,这些原则在整个编程生涯中对我都有帮助。
创建一致的抽象
约瑟夫·阿尔伯斯说得对。
“抽象是真实的,可能比自然更真实。 “
抽象是指在不忽略各个级别存在的更详细细节的情况下,参与一个概念的能力。 我们在现实世界的任何地方都可以找到并使用抽象。 例如,当我们将任何物体称为汽车时 ,我们会自动将其视为整体,而不是将其分解为各个部分,例如底盘,发动机,制动器等。
用软件的术语来说,小时的需求是创建强大的基类,使您可以专注于一组派生类的一组公共属性,而忽略特定类的详细信息。
因此,良好的类接口是一种抽象,它使您可以专注于接口而不必担心类的内部工作原理。 这样创建的设计很简单,然后很容易解耦。
出色的软件设计意味着在例程接口级别,类接口级别和包接口级别创建抽象,从而可以更快,更安全地进行编程。
隐藏实施细节
朗·温(Len Wein)说的话打在了头上。
“总的来说,越短越好。 如果您可以将您的想法封装成一个引人入胜的句子,那么您就回家了。”
隐藏或封装在抽象留下的地方拾取。 虽然抽象说“允许您以更高的详细程度看待任何对象” ,但是封装又向前走了一步,并说“也不允许您以任何其他详细程度来看待该对象。”
这就是继承的奇妙概念出现的地方。
在设计任何软件系统时,我们通常会发现对象之间非常相似,只是有所不同。 例如,在设计合同系统时,我们可以拥有不同类型的合同(固定合同,时间和物质合同,基于激励的合同等),但是每个合同的一般属性保持不变。 因此,您可以创建一个称为“合同”的通用对象,然后将“固定价格”合同定义为“继承自”具有某些附加属性的合同对象,依此类推。
继承简化了设计,因为您编写了用于处理任何内容的通用例程,然后编写了特定例程来处理特定情况。 代码不仅“ 干净 ”,而且还提供了一种很好的方法,可以将不必要的细节与将使用类或对象进行继承的开发人员分离。
继承是面向对象编程中最强大的工具之一。 这是一把双刃剑。 正确使用它可以带来巨大的好处,如果天真使用它会造成巨大的损害。
改变将会发生。 计划一下。
阿米特·雷(Amit Ray)说的话杀死了它。
“在每一次变化中,每片落叶都充满了痛苦和美丽。 这就是新叶子成长的方式。”
在设计任何系统时,都应考虑到预期的变化,并且应保留适当的规定,以防止以后出现胃灼热和悲伤的情况。 根据经验,您需要对系统进行设计,以使更改的效果或范围与发生相同事件的可能性成正比。
可能性越大,系统就需要准备更多以适应变更。
一个良好的起点可以是确定可能发生变化的区域,然后确定期望保持不变的最小最小子集。 可以在此最小子集的顶部完成所有后续计划。
因此,通过首先确定核心,您可以清楚地看到需要构建哪些附加组件,并相应地在代码中保留了“ 出口 ”,以便在以后的时间计划实施。
因此,简而言之,以“ 松散耦合 ”方式创建与核心类之间具有小的,直接和灵活关系的一组类和例程。 这种松散的耦合使设计具有足够的灵活性以适应变化并为易于实现提供了空间。
进行迭代,直到正确为止。
塞巴斯蒂安·特伦(Sebastian Thrun)正确地说。
“很少有想法在第一次尝试时起作用。 迭代是创新的关键”。
设计始终是一个迭代过程。 您通常会发现自己从A点到达B点,然后再次回到A点,重新开始。 这很令人沮丧,但是没有任何捷径可以实现可靠的可行设计。 耐心是关键。
当您沿着从A到B的路径行走时,您将看到各种设计,尝试各种方法以及设想各种高层和低层视图。 初始的高级视图是不稳定的,并且随着您的前进,将其固化为具体的低级视图。 最后,您确定一种方法。 自上而下或自下而上,然后基于该框架创建一个框架。
关键不是在第一次尝试时就停止。 第二次尝试总是比第一次尝试要好,并且您每次尝试都会学到一些东西,从而逐步改善了总体设计。 增量精炼是降低复杂性的强大工具。
正如波利亚(Polya)正确说的。
“了解问题,制定计划,执行计划,然后回头看看您的工作方式。”
原型是布丁中的证明
劳里·安德森(Laurie Anderson)正确地说。
“原型的问题在于它们并不总是有效。 但这就是它的本意。”
原型制作的最大优势也许是设计的视觉表示,即使是小尺寸的图片,也可能超过一千个字。 这张图片不仅使我们相信设计的可操作性,而且还有助于获得必要的“ 支持 ”和批准以继续前进。
但话虽这么说,但原型并非适用于每个项目,而是适用于所有项目,这是一项巨大的财富。
原型模型是一种系统开发方法(SDM),其中构建,测试原型(最终系统或产品的早期草稿),然后根据需要进行重新加工,直到最终获得可接受的原型,从而可以从中获得完整的系统或产品。被开发。
在设计和编码开始之前,原型便是一种抛弃式模型,旨在了解项目的需求。 本质上,原型制作是项目测试。
即使您多次修改了设计,在软件开发过程中也可能会发生许多意想不到的问题。 原型测试至少将使开发团队知道问题出在哪里,并有机会在产品公开发布之前对其进行改进。
遵循纪律原则,原型制作是工作的主要工具,设计师可以使用它来对抗设计的弊端。 回报可能是巨大的; 看看iPhone。
那么设计多少钱
不幸的是,这个问题没有理性或逻辑的答案。 在大多数情况下,这比其他任何事情都更具判断力。 但是,尽管您不能精确地保证任何项目中所需的设计量; 两种设计方法注定每次都会失败。
·根本没有设计
·从头至尾设计所有细节。
力求简单,并坚持迭代式地坚持下去,直到您获得最佳的设计。 设计越容易解决现实生活中的问题,那么成功的机会就越多,就这么简单。
正如乔布斯(Steve Jobs)恰当地说的那样。
“设计不仅是外观和感觉。 设计就是它的工作方式。”
关于作者-:
Ravi Rajan是位于印度孟买的全球IT计划经理。 他还是一位狂热的博客作者,Hai句诗作家,考古爱好者和历史狂人。 在 LinkedIn , Medium 和 Twitter 上与Ravi联系 。
![](https://i-blog.csdnimg.cn/blog_migrate/c58ee58f85953364b26d62f6ce36c13a.png)
翻译自: https://hackernoon.com/you-need-to-have-an-outstanding-design-to-write-awesome-code-3f7805e8e1dc
如何才能根据需求编写代码