将关键字参数传递给包含组件子构建器(每个组件子构建器都使用参数集的不同部分)的构建器的合适设计是什么?是否最好传入一个关键字参数集,然后由每个子生成器解析?还是在调用父构建器时明确指定哪些参数集属于哪些子构建器更好?
我知道在这种情况下“更好”可能是主观的,但我想知道这里是否有一些集体智慧可以借鉴。另外,请注意,在下面的详细信息中,我使用的是Python语言特有的功能,但是对于其他语言如何管理这种情况,我们非常感谢。
细节
-我正在使用
builder design
模式在哪里
BuilderA
包含子生成器
BuilderB()
和
BuilderC
. 我目前的设计思想是将相同的关键字参数集传递给每个子生成器:
class BuilderA():
def __init__(self):
self.builder_b = BuilderB()
self.builder_c = BuilderC()
def build(self, **build_parameters):
artifact_b = self.builder_b.build(**build_parameters)
artifact_c = self.builder_c.build(**build_parameters)
# ... do something to create BuilderA's artifact ...
每个子生成器都有不同的关键字参数:
class BuilderB():
def build(self, param_1=None, param_2=None, **ignored_kwds):
# ...
class BuilderC():
def build(self, param_3=None, param_4=None, **ignored_kwds):
# ...
或者
,
的API可能如下所示:
class BuilderA():
def build(self, builder_b_parameters={}, builder_c_parameters={}):
artifact_b = self.builder_b.build(**builder_b_parameters)
artifact_c = self.builder_c.build(**builder_c_parameters)
# ... do something to create BuilderA's artifact ...
一般来说,这些设计中的一个比另一个更容易接受吗?还是我没有考虑过其他的选择?
-第一种设计更干净,但可防止
BuilderB
和
从共享关键字名称。此外,它还要求每个建设者包括
**ignored_kwds
在其构建方法声明中。这种方法的危险在于,如果用户拼错了关键字参数,则可能会出现意外行为而不会出错。另一方面,第二种设计使界面
建筑时代