Answers:
内部和外部名称之间的不匹配肯定会引起注意。就像Rinzwind指出的那样,同音词和同义词闻起来最糟。
您需要回答的真正问题是:进行更改时,成本/收益的权衡是什么?
对于新的团队成员而言,不变的代价是陡峭的学习曲线,并且增加了将来出现错误的可能性。变更的成本包括明显的时间,项目上老手的新学习曲线以及新错误的可能性。
如果您期望有相对更多的新团队成员,则更可能进行更改。如果您不希望任何人流失,那么当前的团队就不会感到困惑,并且团队对现状感到满意,那么对事物进行重命名实际上没有任何意义。
关于您的第二个问题,我不知道任何已发表的研究或最佳实践。关于第一个问题,我可以从个人经历中使用类似的长寿产品提供一些观察结果,其中“内部”和“外部”名称有时会有所不同。
我真正想修正的名称是“ homophones”,其中一个名称在内部和外部都用于不同的事物。这确实会造成混乱,特别是如果两件事不是完全不同的(以便上下文有助于消除歧义)。在我的个人经历中,一个(抽象的)例子是在内部您有类似a的东西Foo
,它是多个的集合FooEntity
;在外部,只有后者可见,并称为“ Foo”。花了我一段时间才弄清楚,当客户手册中提到多个“ Foo”时,实际上对多个FooEntity
(单个Foo
)就意味着多个,如果这仍然对您有意义。
其次,我想修复在内部使用了某些外部名称的所有“同义词”。像变量名一样,方法/函数名的一部分等等。当开发人员直接从客户需求描述中实施某些操作而忘记“翻译”名称时,通常会发生这种情况。一旦发生这种情况,“错误”名称也趋于传播,因为其他开发人员碰巧会复制/粘贴某些代码以用作新代码的模板。这些同义词并不那么令人困惑,但是它们可能会令人讨厌,因为如果您在代码中搜索对您的任何引用,Bar
可能要记住,某些部分可能会将其称为Qux
,因此您必须搜索两次。(但是,在动态类型的语言中,这比静态类型的语言更糟,因为您必须搜索变量/函数/ ...名称的一部分,而不是其类型的名称。)至于“同义词”的相反情况”,内部使用了内部名称:这种情况不会经常发生,因为客户支持人员等通常对内部名称的了解较少,尽管我认为这样做确实会使客户感到困惑。
如果您至少可以避免或解决以上两种情况,那么我不确定您是否应该尽量使所有内部名称与外部名称相同。当外部名称首先不同于内部名称时,内部名称也没有更改的原因可能很充分。以我个人的经验,这很好的理由是需要支持该产品的较旧版本。如果必须更改许多代码,则将错误修复从以前的名称清理版本合并到最新版本可能会变得困难。
这是一个相当普遍的问题。我从事的许多项目都使用代码名称而不是产品名称(当时可能尚未决定),并且在代码中使用的术语与向用户显示的术语完全不同。我可能会保持现状,除非您对代码进行了大规模的重新设计,或者有特定的原因引起问题。没有用在破坏苹果车上。另外,谁能说从现在开始5年不会有更多变化?然后,您必须再次进行重命名。别忘了,这也会影响您可能拥有的任何单独的代码文档(已发布的API),如果打印出来(硬拷贝),这可能是一个特别昂贵的问题。
我发现,“营销”实体通常与内部实体并不完全对应。在这种情况下,以不同的抽象级别引入实体更有意义,这将使术语差异成为讨论的重点。
例如,我们有一个代表层次结构的模型。层次结构中的每个级别都有一个与之相关的术语,这取决于层次结构如何用于对现实世界关系进行建模,但是在内部,从层次结构的一个层次到下一个层次的行为没有差异。该术语本质上只是层次结构中该级别的名称,因此对于树中的特定节点,该名称仅描述该节点是什么。它没有规定任何特定的行为。
而且,树是多根的,因此有几个没有父节点的节点。即使从概念上讲,存在一个根(它实际上代表了宇宙),并且将其包含在模型中会使许多操作简单得多,但它没有“营销术语”。
当然,我们系统中的不同组件使用不同的术语。它们是由不同的团队在不同的时间开发的,我们无法完全控制它们。实际上,在某个时候,有人在一个组件中添加或删除了一个关卡,因此其他关卡相对于彼此移动。相同的三个级别在一个组件中由A,B和C表示,而在另一组件中表示为B,C和D。
加强抽象,将所有事物简单地建模为“节点”或同等通用的模型,就可以更轻松地推论此类模型。每个节点都知道其“营销术语”是什么,并且表示特定营销术语的类型可以知道该术语在每种情况下的含义。