应用干净的代码和SOLID原则需要花费我很多时间:正常吗?

时间:2013-05-24 13:01:30

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

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

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

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

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

我是初学程序员,你对我有什么建议,学习这种模式需要多长时间,应用干净的代码和SOLID是否真的需要花费更多的时间来开发app而不是应用那些?

2 个答案:

答案 0 :(得分:3)

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

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

我读过的大多数代码,无论是专业人士还是非专业人士,你都可以告诉他们什么时候第一次尝试编写完美的代码,因为他们总是不这样做,他们永远不会回去清理它。实际的干净代码是迭代一段代码的草稿的结果,只有原始作者才能理解,直到熟悉所用模式的人都能轻易理解。

尝试编写完美的代码是不成熟的优化。

首先,你最终会得到大量的抽象,你实际上并不需要满足一些关于可维护代码的教条。通常情况下,您会花费大量时间在解决方案的结构上,而您尝试解决的实际问题会在翻译中丢失。实际上,抽象的数量越少,就越容易弄清楚一段代码的核心责任。最好只在最高级别构建抽象,并且只在绝对必要时才构建更多抽象。

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

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

我们发生的事情是,我们过分热心让课程对一件事负责。实际上,我们有不同的服务来生成搜索的sql并将搜索参数保存到数据库。当我们使用弹性搜索实现这一点时,参数保存服务就派上用场了,但仍然需要预先完成的工作。事实上,我们预先提出的可维护性的额外时间大部分都是浪费,因为我们最终不得不重新设计核心抽象错误来处理新的需求。

如果我们能再做一遍,我们就会把所有代码写在一个巨大的搜索服务中。在我们的起草过程中,我们会将我们实现的每个其他服务分解为该服务上的简单私有函数。当我们在2年后创建第二次搜索实现时,我们为了打破共享服务而必须做的就是将私有函数复制到新服务并在新服务上公开共享功能。这比尝试从门中编写“完美”代码更加务实。


不要误解我,拥有干净的代码将使您的代码更加优雅和可维护;你只是不能在第一关上写它。您无法通过阅读书籍或查看人们认为干净的源代码来真正理解使代码清洁的原因。除了那些东西之外,为了实现组成干净代码的原则的完整意图,需要花费大量时间来处理我上面描述的错误。 不要害怕犯这些错误,他们会让你成为更好的程序员。害怕犯错是一种不容忍的观点,会让你成为一个更糟糕的程序员。

答案 1 :(得分:3)

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

我现在正在开发SOLID应用程序并不需要花费太多时间,而且从长远来看它可以回收大量时间,而且通常甚至可以在几次迭代中回收。

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

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