Language agnostic 从哪里开始从头构建真正的代码库?

Language agnostic 从哪里开始从头构建真正的代码库?,language-agnostic,code-reuse,code-organization,codebase,Language Agnostic,Code Reuse,Code Organization,Codebase,目前,我有一个或多或少有组织的项目集,我的工作或工作。有些是重构、文档化和单元测试的,而另一些则不是 当我想重用我以前写过的代码时,我会花几分钟搜索我写过代码的项目,然后将代码复制粘贴到一个新的项目中,如果需要,进行重构、文档编制和单元测试 这很难看,因为它需要做额外的工作,记住编写的内容和位置,以及(可能是最难看的一个)跨项目复制代码。在没有公共代码库的情况下与其他开发人员合作也是一个问题 现在,我想创建一个代码库,但我对它一无所知,也从未在任何公司看到过一个严肃的代码库 那么从哪里开始呢?是

目前,我有一个或多或少有组织的项目集,我的工作或工作。有些是重构、文档化和单元测试的,而另一些则不是

当我想重用我以前写过的代码时,我会花几分钟搜索我写过代码的项目,然后将代码复制粘贴到一个新的项目中,如果需要,进行重构、文档编制和单元测试

这很难看,因为它需要做额外的工作,记住编写的内容和位置,以及(可能是最难看的一个)跨项目复制代码。在没有公共代码库的情况下与其他开发人员合作也是一个问题

现在,我想创建一个代码库,但我对它一无所知,也从未在任何公司看到过一个严肃的代码库


那么从哪里开始呢?是否有书籍或在线文档解释如何创建此类代码库,或描述现有或虚构的代码库、其工作原理、维护方式等?

使用或等版本控制服务。通过这种方式,您的代码可以在线备份,如果需要,您可以恢复到旧版本。

首先,要认识到这是一项需要其他开发人员和管理人员参与的重大工作。在重新组织代码库时,您可能需要停止开发新特性,而这几乎从来都不是管理的选项。甚至向他们提起这件事也可能是不好的。“我们可以把这件事推迟到重新组织之后”接着是“在这件事完成之前我们不能重新组织”,大任务和重新组织都在互相等待。这是管理特性死锁,很难修复

继续前进,您需要与您的团队坐下来,确定您的产品是什么,它们是如何构建的,重叠在哪里,以及产品如何从重复使用中受益。您需要仔细检查产品的构建结构,并对其进行重构,以包括您即将构建的commons库


接下来,您需要隔离依赖关系。不要让公众依赖于一个项目。如果一个项目(projB)将来很有可能依赖另一个项目(projB),那么不要让该项目(projA)依赖另一个项目(projB)。循环依赖会让人垂涎三尺。

我想你指的是可重用的库。这有点依赖于语言,因为带有链接器和编译器的语言会删除不用于使可交付内容更小的代码,而即时编译或解释语言则不会这样做,因此加载整个库可能会浪费资源

它的长短不一之处在于查看代码,了解通常执行的任务和使用的参数。增加一点修改空间,并创建一个界面,在其中隐藏所有功能。正确定义接口是最重要的部分。尽量避免函数调用的集合,而是在一个接口后面创建相关函数,然后在每个操作任务后面创建一个接口-您正在尝试将工作拆分为操作

接口解决方案将分离(重构工作的)实现和使用接口的工作。这将有助于将公共代码与项目代码分离,从而允许以不同的速率开发它们

尝试将有关特定作业或任务的所有相关信息分组到一个接口后面,这样接口就不会相互依赖

一些关于接口的有用链接。有些链接讨论面向对象的语言,但这些原则和思想可以应用于任何其他类型的语言


不确定这是否回答了问题的任何部分@David备份代码库很重要。如果MainMa的硬盘崩溃,他可能会失去多年的工作。很抱歉,读了维基百科上的“Codebase”一文,我发现“Codebase”一词可能会让人困惑。在我的例子中,我不是在谈论单个项目的源代码(Wikipedia对“代码库”的定义),而是一种统一的存储源代码的方法,以便能够跨项目重用和共享这些代码。所以我的问题不是关于版本控制,我知道在源代码的整个组织上做这样的严重更改是很耗时的,而且不明显。我准备花几个星期的时间来做,所以没关系。现在,依赖性和所有这些东西都是真正的问题,这也是为什么我要一本书/文档来解释可能出现的问题,以及如何解决它们或减少它们的影响。天哪,你说的是“前进”。哈!