我一直在寻找方法来了解管理软件项目的正确方法,我偶然发现了以下博客文章。我已经学到了一些难以理解的事情,其他事情是有道理的,但其他人仍然不清楚。
总而言之,作者列出了项目的一系列功能,以及这些功能对于缺乏更好的术语而导致项目“闷闷不乐”的程度。您可以在此处找到完整的文章:http://spot.livejournal.com/308370.html
特别是,我不理解作者关于将依赖项与项目捆绑在一起的立场。这些是:
==捆绑==
您的来源仅附带其依赖于[+20分失败]的其他代码项目
为什么这是一个问题,特别是在第3点,您已经修改了项目依赖项以满足项目的需求,因此,您的代码是否应该与其依赖项一起分发更难以理解?
如果在没有首先构建捆绑代码位[+10点失败]的情况下无法构建源代码
对于针对第三方库建立的软件,这不一定是必须的吗?您的代码需要在链接器可以工作之前将其他代码编译到其库中吗?
如果您修改了其他捆绑代码位[+40点失败]
如果您的项目需要这样做,那么您自然会将所述代码与您的代码捆绑在一起。如果你想自定义一些lib的构建,比如WxWidgets,你必须编辑那些项目构建脚本来构建你想要的库。随后,您必须将这些更改发布给希望构建代码的人,那么为什么不使用已经写入的params的高级make脚本,并分发它?此外,(特别是在windows环境中)如果您的代码库依赖于特定版本的lib(您还需要为您的项目自定义编译),那么为用户自己提供代码并不容易(因为在在这种情况下,用户不太可能已经安装了正确的版本)?
那么您如何回应这些评论,以及我可能没有考虑哪些方面?你是否同意或不同意作者的观点(或我的观点),为什么?
编辑澄清。
答案 0 :(得分:0)
您的来源仅包含其依赖的其他代码项目。
我的项目需要项目X。
然而,由于我的项目取决于X的秘密内在奥秘或X的先前版本,因此我的项目包括X的副本。特别是X.的释放n.m。没有其他。
尝试安装最新最好的X,看看我的项目有什么中断。由于升级X破坏了我的项目,忘了我的项目。他们不会为更新后自发破坏的东西而挣扎。他们会找到一个更好的开源组件。
因此失败分数。
如果没有先构建捆绑的代码位,就无法构建源代码。
我的项目不依赖于X的API。它依赖于深层的内部链接到X的特定部分,绕过API。
如果我的项目依赖于API到X,那么 - 对于某些语言,如C或C ++ - 我的项目只能用C或C ++头文件编译,而不是二进制文件。
对于Java,这不太正确,因为没有独立的非二进制头。对于动态语言(如Python),这没有任何技术意义。
然而,即使是Java和Python也有办法将接口与实现分开。如果我依赖于实现(而不是接口),那么我仍然会创建同样的基本问题。
如果我的项目依赖于C或C ++二进制文件,并且它们不按顺序构建内容,或者在不重建我的情况下升级另一个组件,那么事情可能会对它们造成严重影响。他们可能会看到古怪,破损,“不稳定”。我的产品坏了。他们不会(也不能)调试它。他们完成了。他们会发现更稳定的东西。
因此失败分数。
如果您修改了其他捆绑代码位。
修改X时我有两个选择。
将其作为X的一部分接受。
修复我的程序以使用未经修改的X.
如果我的项目依赖于修改过的X,那么没有人可以简单,正确和独立地安装X.他们无法升级X,他们无法维护X.他们可能无法将错误修复或安全补丁应用于X.
我基本上通过修改X来完成他们的工作。
因此失败分数。
随后,您必须将这些更改发布给希望构建代码的人。
实际上,他们会因此而恨我。他们不想知道X的神秘变化。他们想根据规则建立X,然后根据规则建立我的东西。他们不想阅读,思考或确定神秘更新补丁包是否正确应用。
不是开玩笑,而是下载竞争套餐。 FAIL。
如果您的代码库依赖于特定版本的lib(您还需要为您的项目自定义编译)
那真的很破旧。如果我依赖于自定义编译的版本,他们就会查看我的包。在他们挣扎之前,他们会找到没有版本特定的内在奥秘和自定义编译的东西。 FAIL。