5

Sometimes a project can be organized either as a single package or as several packages. When one is in such a situation, how should one decide which option is better?

4

1 回答 1

10

将项目分发到多个包有一些直接的缺点:

  • 构建过程不仅仅是复杂的cabal build
  • 版本和版本号必须协调
  • 用户必须安装并依赖多个包
  • API 文档分散在 hackage 上

但是对于仅依赖于软件包子集的用户来说,也有潜在的好处:

  • 他们不必下载、编译、链接、安装、信任和许可他们不需要的包中的代码
  • 他们不必下载、...和他们不需要的软件包的许可依赖项
  • 如果包的名称和元数据特定于单个包,而不是整个项目,他们可以更轻松地发现包

即使用户最终依赖于所有软件包,也有一些好处:

  • 不同的包可以有不同的维护者和/或发布时间表

我认为这个决定应该基于你是否认为有用户可以真正实现潜在的好处。所以我想说这个决定主要取决于对以下问题的回答:

  • 项目中是否有一部分比其他部分更改得更频繁?
  • 项目中是否有一部分比其他部分更受信任?
    (例如,一个 core 包和一个 contrib 包)
  • 项目中是否有一部分具有许多附加依赖项但并非所有用户都需要?
    (例如,另一个项目的接口)
  • 项目的一部分是否可以独立于整个项目的目的而被重用?
    (例如,主项目中使用的组合器库)
  • 项目中是否存在强制用户使用特定许可证(直接或通过依赖项)但并非所有用户都需要的部分?

最后,对于 cabal,在“一个包”和“多个包”之间有一个中间地带,因为一个 cabal 包可以包含一个库和任意数量的可执行文件、测试套件和基准。这涵盖了一个重要的原因,否则会导致拆分包:用户不应该仅仅依靠测试库来使用包。

于 2013-08-26T07:06:03.653 回答