到目前为止,我在官方 Rust 代码和其他 crate 中看到了两种构建器模式:
impl DataBuilder {
pub fn new() -> DataBuilder { ... }
pub fn arg1(&mut self, arg1: Arg1Type) -> &mut Builder { ... }
pub fn arg2(&mut self, arg2: Arg2Type) -> &mut Builder { ... }
...
pub fn build(&self) -> Data { ... }
}
impl DataBuilder {
pub fn new() -> DataBuilder { ... }
pub fn arg1(self, arg1: Arg1Type) -> Builder { ... }
pub fn arg2(self, arg2: Arg2Type) -> Builder { ... }
...
pub fn build(self) -> Data { ... }
}
我正在编写一个新的crate,但我有点困惑应该选择哪种模式。如果之后更改一些API将很痛苦,因此我想现在做出决定。
我了解它们之间的语义差异,但在实际情况下应该优先选择哪种?或者我们应该如何在它们之间进行选择?为什么?
derive_builder
crate列出了一些优点和缺点,具体内容请见这里:https://docs.rs/derive_builder/latest/derive_builder/#builder-patterns。 - GManNickG