【问题标题】:How do you name 'back-reference' properties?您如何命名“反向引用”属性?
【发布时间】:2009-04-07 07:46:23
【问题描述】:

我正在开发一个具有丰富领域模型的项目。

我的一些类有其他类型的集合,而那些其他类型有一个属性可以引用它们的“所有者”。 这听起来可能有点神秘,所以一个代码示例会有所帮助:

public class Product
{
    private IList<ProductPrice> _prices = new List<ProductPrice>();

    public void AddPrice( ProductPrice price )
    {
       price.Product = this;
       _prices.Add (price);
    }
}

public class ProductPrice
{
    public DateTime ValidationDate {get; set;}
    public Decimal  Price {get; set;}
    public Product Product {get; set;}
}

问题是:您喜欢 ProductPrice 类的“产品”属性的名称是什么?

你想给它起个名字吗: - 产品(就像现在一样) - 所有者 - 属于 - 别的?

【问题讨论】:

    标签: naming-conventions domain-driven-design


    【解决方案1】:

    产品 - 没有歧义且命名一致 - 产品始终是产品。

    如果从外部访问该属性,我更喜欢这样:

    price.Product.Name
    

    比这个:

    price.Owner.Name
    

    【讨论】:

      【解决方案2】:

      产品。

      如果你有很多这样的类,并且想要一般地遵循反向引用,请从具有抽象方法 parent() 的 HasParent 接口继承,并让父接口继承父接口。但除了遵循对象图或通过强制转换之外,您对 Parent 无能为力。

      编辑:实际上,让我修改一下。我在一个项目中工作,我们有一个半复杂的对象图,并且由于一些糟糕的计划和一些需求变化,有时我不得不跨越图来从关联的对象中获取数据。 ComponentCost 到其父项的 Cost 到其父项,其子 CustomsInfo 到其子 ComponentCustomsInfo 到其查找表 DutyCalculation。 (是的,我没有做原始设计,所以不要对我皱眉头。)

      parent() 方法可以使它更通用一点。 (最终我将一组枚举(Java 枚举,所以单例类)放在一起,以一种类型安全甚至优雅的方式为我遍历了图。不过,如果有父级,实现起来会更简单。)

      【讨论】:

        【解决方案3】:

        Parent 是一个相当通用的术语,我经常觉得它很有帮助 - 但Product 也非常好用。

        【讨论】:

        • 我发现 Parent 可能过于笼统,描述性不够。产品很好,但在某些情况下感觉“BelongsTo”更好。然后我想:我不应该在命名这些属性时保持一致吗……
        猜你喜欢
        • 2017-08-29
        • 1970-01-01
        • 2017-05-09
        • 2012-01-26
        • 1970-01-01
        • 2017-10-13
        • 1970-01-01
        • 2020-08-04
        • 1970-01-01
        相关资源
        最近更新 更多