Architecture 如何构建大型应用程序

Architecture 如何构建大型应用程序,architecture,distributed,Architecture,Distributed,我认为我已经相当擅长编程的基础知识(对于各种语言)。我能写一行很好的代码。我能写一个好方法。我能写好一堂课。我能写一组好的课。我能写很好的中小型应用程序 然而,我不知道如何构建一个好的大型应用程序。特别是在涉及多种技术的情况下,随着时间的推移,可能会涉及更多技术。例如,一个项目有一个大型web前端,一个连接到其他集成后端的大型服务器后端,最后是一个大型复杂数据库。哦,我参与了其中一些应用程序,我相信我可以构建一个。然而,我不太确定它是否可以被称为“好” 因此,我的问题是参考一本书或其他好的阅读来

我认为我已经相当擅长编程的基础知识(对于各种语言)。我能写一行很好的代码。我能写一个好方法。我能写好一堂课。我能写一组好的课。我能写很好的中小型应用程序

然而,我不知道如何构建一个好的大型应用程序。特别是在涉及多种技术的情况下,随着时间的推移,可能会涉及更多技术。例如,一个项目有一个大型web前端,一个连接到其他集成后端的大型服务器后端,最后是一个大型复杂数据库。哦,我参与了其中一些应用程序,我相信我可以构建一个。然而,我不太确定它是否可以被称为“好”

因此,我的问题是参考一本书或其他好的阅读来源,在那里我可以学习如何分发和组织一般大型项目的代码和数据。例如,我是希望非常严格地分层,还是希望封装独立的单元?我是想将大部分逻辑保持在同一个池中,还是应该在添加我正在添加的任何功能时按照看起来最符合逻辑的方式进行分发

我见过很多关于这些问题的一般原则(例如,没有意大利面代码、肉丸子代码……),也读过一些讨论这一问题的优秀文章,但我从未遇到过一个能让我获得具体的实用知识的来源。我意识到这个问题的难度,所以我很高兴听到其他人发现的帮助他们寻求这些知识的阅读材料

一如既往,感谢您的回复

****鉴于“好”代码定义的争议性质,在这种情况下,“好”一词将不会被定义(它的意思是你认为它应该意味着什么)


借用自tvanfosson:


从一个小应用程序开始,说 是的,每次有人想要一个新的 新增功能


下面是一本我们用来指导编码标准和方法的书:

我正在研究的这个项目自从第一次在众所周知的餐巾纸背面制定以来,已经发展了将近10年。而该项目至今仍在蓬勃发展。它并不完美,循环依赖性仍然存在问题,一些类接口不是很干净,但大多数类不是这样的,程序运行正常,我们的用户很高兴

我还推荐史蒂夫·麦康奈尔(Steve McConnell),正如许多其他人以前所做的那样。我特别喜欢他比喻的“成长”软件,而不是构建或构建。这种查看软件的方式更适合于使用寿命较长的软件

  • 决定哪些特征是最重要的;忘了其他的吧
  • 决定那些功能中哪一个最重要,然后忘掉其余的
  • 实施它们(应该需要几周时间,否则重复步骤1和2)
  • 发射
  • 查看哪些功能可用,哪些不可用,哪些缺失
  • 返回到步骤1

  • 使用设计模式使其具有可扩展性,这意味着您不必为了嵌入新功能而改变一切

    决定你需要构建什么,然后构建它

    将其分解为单独执行任务的模块

    计划,在你开始之前知道你在建造什么,然后建造它,而不是别的


    只写你需要的功能,不要添加你认为有用的东西,但是。。。让它足够灵活,以便能够添加您可能需要添加的内容。

    好吧,您可以看看rational统一流程。检查基本部分,选择一些您认为需要的工件。 列出您需要的所有功能,并将它们组织到需求列表中。 还要仔细规划你的软件架构,这样你以后就不必修改它了。
    有了这些技巧,开发大型应用程序将相对容易。

    大型应用程序不是一夜之间创建的。企业应用程序从小块开始,然后将它们组合在一起。如果你设计的应用程序是一种可以扩展的方式,那么它将更容易与数据库、第三方工具等所有周围因素集成。如果你深入研究,你会发现许多关于扩展和架构的优秀案例和材料,如Myspace、Amazon和许多其他。只有经验才能让你开发出伟大的大型应用程序。

    以程序员的身份,我们喜欢相信自己是聪明人,因此很难承认有些事情太大太复杂以至于不能一下子想清楚。但是对于一个大型软件项目来说,这是真的,你越早认识到你的有限的大脑容量,并开始想出简化问题的方法,你的境况就会越好

    要意识到的另一件主要事情是,您将花费大部分时间更改现有代码。构建初始代码库只是蜜月期——您需要在设计代码时牢记这样一个理念:6个月后,您将坐在代码库前面,试图解决一些问题,而不知道这个特定模块是如何工作的,即使是您自己编写的

    那么,我们能做些什么呢

    最小化代码中不相关部分之间的耦合。随着时间的推移,代码将以您无法预料的方式发生变化——在与不熟悉的产品集成时会出现问题,需求变化——这些都会在变化中产生涟漪。如果已经建立了稳定的接口并对其进行了编码,则可以在实现中进行所需的任何更改,而不会影响使用该接口的代码。您需要花费时间和精力开发经得起时间考验的界面--i