1

由于我不是以英语为母语的人,我最好确保不要创建对其他人来说听起来很尴尬的 DSL。一个 DI 容器从一个项目中出现,我将它隔离为一个单独的项目。我看到其他 DI/IOC 容器使用类似bind(interface).to(class). 我会使用以下(伪代码):

given(interface).thenUse(class)
given(class).constructWith(id=5)
given(class).inject(observer).inMethod(addObserver)

这些是有道理的,还是听起来像是一个没有掌握这些词的一些更精细语义的人的结构?

4

1 回答 1

2

我认为您的方法与其他 DI 项目中的示例一样有意义。

几点注意事项:

  1. bind/to写起来比given/短thenUse。这本身不是问题,但是如果您可以使用较短的名称实现相同的含义,则没有太多理由使用较长的名称(在给定的示例中,它们的读法相同)

  2. 如果有一个用于相同用途的既定名称模式,那么对于知道您实现的既定模式的用户来说,生活会更容易(例如掌握概念/含义),这将是一个好处。

    如果您在将其他类似库/工具的用户“转换”为您的用户之后,使用 smae 命名约定可以降低这些用户的进入门槛。

    但是,如果您的实现在某些方面在概念上有所不同,那么最好使用不同的名称来强调差异并减少认知失调(在预期和正在发生的事情之间)。

    如果您认为(其中一种)其他命名模式存在缺陷,会造成认知失调(在名称所暗示的内容和实际作用之间),那么用更好的命名方案替换它可能意味着更多的追随者。

  3. 虽然given(class).inject(param).inMethod(method)用英语读得很好,但它的对象顺序可能对某些人来说是违反直觉的(类/参数/方法,而不是类/方法/参数,这是面向对象语言的自然顺序:)Class.method(param);;考虑:given(class).and(method).useParam(param)

于 2012-05-21T19:36:05.900 回答