gpt4 book ai didi

c# - 如何想出更清晰的接口(interface)名称?

转载 作者:行者123 更新时间:2023-12-03 13:39:02 25 4
gpt4 key购买 nike

我在一个应用程序中看到它具有以下接口(interface):

IHasContent
IHasValue
IHasMesh
IHasGeometry
IHasTransformation

他们不应该吗?:
IHaveContent
IHaveValue
...

或者?:
IIncludeContent
IIncludeValue
...

就我个人而言,我倾向于制作它们:
IContent
IValue
IMesh
IGeometry
ITransform

因为不是 ISomething已经暗示它有 something ?

至于最后一个,要不要做 ITransformable反而?

我认为使用 I + (Has/Have/Include/Exist, etc) + Name使接口(interface)名称更加困惑。

关于如何提出更好的界面名称,不会让人感到尴尬,有什么想法,并且能够传达含义吗?

最佳答案

其中一些名称(内容、值(value)等)含糊不清,几乎无法描述项目的内容/行为。通常,名称应尽可能具体和不同 - IScriptParameter 可能比 IValue 更具描述性。随着项目的发展,具有更多描述性的名称将使您的类型更容易区分(如果您不小心,您最终可能会使用 IValue 和 INumber 和 IAmount 来处理“值”的变化!)

如果您的界面(例如 IMesh)意味着“提供网格的属性”,那么 IMesh 是一个非常好的名称 - 它描述了您可以将对象视为网格的事实。

如果您的界面用于应用 Action (例如,将对象渲染为网格,或对对象应用变换),则考虑使用动词/形容词而不是名词命名(例如 IRenderable、ITransformable) - 这是.net 中的常见模式(例如,IEnumerable(动词/形容词)而不是 ICollection(名词))

对我来说,“IHasMesh”听起来更像是 IMeshContainer——即它是一个包含网格的对象,并且界面允许我“获取网格”。所以它不允许我对网格中的数据进行操作或查询,而只是通过接口(interface)获取整个网格对象。

所以我会使用:

  • ITransformable 如果对象 可以改造通过界面
  • ITransform 如果对象可以像 一样直接使用它是一个变换
  • IHasTransform/ITransformContainer/ITransformProvider 如果对象是 容器 可查询以提取 Transform 对象
  • 关于c# - 如何想出更清晰的接口(interface)名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5266907/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com