我认为我已经非常擅长编程的基础知识(适用于多种语言)。我可以写出不错的代码。我可以写一个好的方法。我可以写一堂好课。我可以写一组很好的类(class)。我可以编写好的中小型应用程序。

但是,我不知道如何构建一个好的大型应用程序。特别是在涉及多种技术并且随着时间的推移可能涉及更多技术的情况下。假设一个项目具有大型Web前端,大型服务器后端,该后端连接到其他集成后端,最后是大型复杂数据库。哦,我参与了其中一些应用程序,我敢肯定可以构建一个。但是我不确定它是否可以视为“良好”。

因此,我的问题是引用一本书或其他好的阅读资源,在这里我可以学习如何为一般的大型项目分发和组织代码和数据。例如,我想非常严格地分层处理还是将其封装为独立的单元?我想尝试将大多数逻辑保留在同一个池中,还是应该在添加我要添加的任何功能时将其分发为最合乎逻辑的?

我在这些问题上见过很多一般原则(例如,没有意大利面条代码,肉丸代码...),并且阅读了一些讨论此问题的出色文章,但是我从未遇到过使我想到具体实用的资源知识。我意识到问题的难度,因此很高兴听到别人发现的有助于他们寻求此类知识的阅读 Material 。

与往常一样,感谢您的答复。

最佳答案

作为程序员,我们喜欢相信自己是聪明的人,因此很难承认有些东西太大而又复杂,以至于无法一时考虑。但是对于大型软件项目而言,这是事实,您越早认识到有限的大脑能力并开始提出简化问题的方法,您的情况就会越好。

另一个要认识的主要事情是,您将花费大部分时间来更改现有代码。构建初始代码库只是蜜月期-您需要在设计代码时牢记以下想法:6个月后,您将坐在代码前面,试图解决一些问题,却不知道此特定模块的工作原理,甚至虽然你自己写的

所以,我们能做些什么?

最小化代码无关部分之间的耦合。代码将随着时间的流逝以您无法预料的方式发生变化-与不熟悉的产品集成,需求变更会出现显示问题,并且会引起链式反应。如果已建立稳定的接口(interface)并对其进行了编码,则可以在实现中进行所需的任何更改,而这些更改不会影响使用该接口(interface)的代码。您需要花费时间和精力开发可经受时间考验的界面-如果界面也需要更改,您将回到正题。

建立可用于回归测试的自动化测试。是的,这需要大量工作。但是,当您可以进行更改,运行测试并确定它仍然可以正常工作时,它会在将来产生返回,而不会担心您是否将最新更改提交给源代码管理,一切都会失败。

放下棘手的东西。 我时不时地看到一些聪明的C++模板技巧,并想:“哇!这正是我的代码所需要的!”但是事实是,增加代码的可读性和易理解性通常根本不值得增加通用性。如果您是像我这样的人,其天生的倾向是尝试以尽可能通用的方式解决每个问题,那么您需要学会克制它,直到您真正遇到对该通用解决方案的需求为止。如果需要,您可能需要重写一些代码-没什么大不了的。

关于architecture - 如何构建大型应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/473797/

10-12 01:08