【问题标题】:Rust, 2 crates with overlapping private functionsRust,2 个带有重叠私有函数的 crate
【发布时间】:2019-12-23 14:51:26
【问题描述】:

我正在编写 2 个具有不同 API 的 rust 数据结构(容器),但大约 50% 的幕后功能是相似的。 FWIW,第一个是存储可比较 (std::cmp::Ord) 数据的红黑树,另一个是具有类似 API 的列表的容器,不需要数据可比较,并且使用类似于红黑树排序的缓冲区。

我认为通常这两种容器数据结构都会作为库存储在 2 个不同的 crate 中。但是它们共享一些私有功能,例如树再平衡。我坚持不维护相同私有(相当复杂)代码的 2 个版本,所以我认为我剩下的唯一选择是将 2 个数据结构组合到同一个 crate 中。有没有更好的选择?

【问题讨论】:

    标签: rust private encapsulation organization code-organization


    【解决方案1】:

    还有更好的选择吗?

    是的。用管道制作第三个板条箱,并让你的 2 个瓷板条箱依赖它。他们不需要公开暴露管道,保持封装。

    这很常见。例如,regex (porcelain) crate 依赖于 regex-syntax (plumbing) crate,但不会暴露此 crate 中的任何内容。对于regex的用户而言,regex-syntax是不存在的。他们最远到达wrapping even the simplest functions

    【讨论】:

    • 这种方法有命名约定吗?对于一个简单的“交友”(可能更像是监视)一个班级的任务来说,这似乎是一个很大的开销。
    • 我认为这种箱子没有命名约定。但是拥有一个带有 3 个板条箱的货物工作区几乎没有任何开销。而且由于您提到“交友”,我猜您来自 C++,但如果您想在 C++ 中提供 2 个数据结构作为 2 个单独的库,您最终也会将公共管道隐藏在第 3 个库中。
    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 2019-03-02
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多