【问题标题】:Applying clean code and SOLID principle take me so much time: normal? [closed]应用干净的代码和 SOLID 原则花了我这么多时间:正常吗? [关闭]
【发布时间】:2013-05-24 13:01:29
【问题描述】:

我是编程新手,确切地说是 11 个月。我真的很想成为一名专业的程序员,写出高质量的代码,所以我正在学习干净的代码、SOLID 原理和 OOP 设计。我注意到的是,我需要时间来设计遵循干净代码的代码而不是不遵循这些代码。

这是我的第一个付费项目,我真的很想制作高质量的代码。我意识到,我花了几天时间编写我的应用程序的一些组件,这些组件遵循干净的代码和 SOLID,而如果不遵循干净的代码,只需要不到一天的时间。

如果我继续应用干净的代码,我认为我不会达到最后期限,但我必须这样做,因为我知道业务会增长并且需求会改变。我正在开发一个海滩度假村计费和预订系统,我知道它将来需要处理在线预订。

我可以说像ORM、WCF等新技术很容易学习,但是干净的代码、SOLID和设计模式是不同的。

我是一名初级程序员,您对我有什么建议,学习这种模式需要多长时间,应用干净的代码和 SOLID 是否真的比不应用这些需要更多的时间来开发应用程序?

【问题讨论】:

  • 简单回答:是的。尽管随着时间的流逝,您的能力会提高到自然而然的程度,并且几乎不会花费任何额外的时间。这只是学习曲线......
  • 根据经验:编写不干净的代码可能会更快地获得结果,但最终您会发现代码不可维护/不可扩展,您可能需要重写很多(如果不是整个项目)。没有软件项目是有限的(或至少不应该是有限的)。因此,我可以建议保持干净的代码和 SOLID 原则。
  • 我老板说这个项目很简单,一天就可以完成。好笑的是他不是程序员,连电脑基础都不会。

标签: design-patterns dependency-injection coding-style


【解决方案1】:

对于事物的不同观​​点,不要专注于预先编写干净的代码。

先编写解决问题的代码,然后再回去清理。唯一需要注意的是不要走太久而不回去清理它。通过清理它,我的意思是返回并仅为定义系统意图的抽象实现 SOLID 原则。

我读过的大多数代码,无论是否来自专业人士,你几乎都可以判断出他们何时尝试编写完美的代码,因为他们总是没有这样做,而且他们永远不会回去清理它。真正干净的代码是对只有原作者才能理解的代码块草稿进行迭代的结果,直到熟悉所用模式的任何人都可以轻松理解为止。

尝试预先编写完美的代码是为时过早的优化。

首先,您最终会得到大量的抽象,而这些抽象实际上并不只是为了满足一些关于可维护代码的教条。很多时候,您会在解决方案的结构上花费大量时间,以至于您尝试解决的实际问题在翻译中丢失了。实际上,抽象的数量越少,就越容易弄清楚一段代码的核心职责。最好先只在最高级别构建抽象,然后在绝对必要时再构建更多。

其次,您通常会根据当前需求的参数设计错误的抽象,而不是如果您确切知道未来需求将如何变化。

我在求职者搜索项目中有一个很好的例子。最初我们的要求是为结果集加载搜索结果和糖果数据(统计图表等)。我们使用 sql 实现了这一切,并将加载 candy 和获取搜索结果的过程分离到不同的服务中。几年后,我们决定尝试使用弹性搜索来实现这一切。事实证明,我们没有必要使用弹性搜索将糖果生成与搜索结果分开,因为它可以同时进行。

发生在我们身上的是,我们过于热衷于让班级对一件事负责。事实上,我们有不同的服务来为搜索生成 sql 并将搜索参数保存到数据库中。当我们使用弹性搜索实现这一点时,参数保存服务就派上了用场,但它仍然是前面做的不必要的工作。事实上,我们为可维护性而投入的大部分额外时间几乎都是浪费,因为我们最终不得不重新处理核心抽象错误以适应新的需求。

如果我们可以再做一遍,我们会改为将所有代码都写在一个巨大的搜索服务中。在起草过程中,我们会将我们实现的每一个其他服务分解为该服务上的简单私有函数。 2 年后,当我们创建第二个搜索实现时,为了打破共享服务,我们所要做的就是将私有功能复制到新服务并在新服务上公开共享功能。这比试图写出“完美”的代码要实用得多。


不要误会我的意思,干净的代码会让你的代码更加优雅和可维护;你只是不能在第一遍就写出来。仅仅通过阅读一本书或查看人们认为是干净的源代码,你无法真正理解是什么让代码变得干净。除了这些东西之外,为了实现构成干净代码的原则的全部意图,还需要花费大量时间来遇到我上面描述的错误。 不要害怕犯这些错误,它们会让你成为更好的程序员。害怕错误是一种不宽容的观点,会让你成为更糟糕的程序员。

【讨论】:

  • 您的帖子中有很多全有或全无的论点。第一次尝试编写“干净的代码”与尝试编写完美的代码不同。完美的代码是不存在的,你不应该花费过多的时间去追求它。但是,您仍然可以在第一次编写不是程序化、不可重用和不可维护的混乱代码。许多软件工程正在平衡各种需求和可用资源。每个程序员都需要在可维护性、可读性、优先级、业务需求等之间取得平衡。
  • @JaceRhea 我的帖子中没有全有或全无的论点。整个回应是试图让提问者摆脱那种认为 SOLID 是主要目标的心态,而实际上它是在解决手头的问题。既然你错过了,那么你的其他 cmets 根本不会处理我的帖子。
【解决方案2】:

学习东西需要时间。你不是一个经验丰富的专业人士(因为这不可能在 11 个月内成为;没有什么可耻的)所以显然需要时间来掌握 SOLID 的含义并正确应用它。我花了好几年的时间!

我现在知道,开发 SOLID 应用程序对我来说并不会花费太多时间,而从长远来看,它会带来很大的回报,甚至通常会在几次迭代内就得到回报。

我的建议:去找你的老板,解释你想做什么,争取更多的时间,解释为什么这对你很重要,对他来说(非常重要)!由他决定你是否有时间在工作中学习。

如果他拒绝给你这个时间,开始在你自己的时间里学习这些东西,与此同时......开始寻找一份新工作,那里有重视这些模式的专业人士和有空间学习的经理并成长。

【讨论】:

  • 还有,我开始编程很晚,准确地说是26岁,我的目标是在我31或32岁时成为专业人士,你认为这可能吗?
  • “专业”很难定义,但如果你充满热情,一切皆有可能。
  • 但我喜欢使用 Robert Martin 在他的书The Clean Coder 中使用的专业定义。根据马丁的定义,我自己也有很长的路要走,才能称自己为专业人士。
猜你喜欢
  • 2021-03-27
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 2010-11-29
相关资源
最近更新 更多