你如何命名'反向引用'属性?

时间:2009-04-07 07:46:23

标签: naming-conventions domain-driven-design

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

我的一些课程包含其他类型的集合,而其他类型的课程则具有引用其“所有者”的属性。 这听起来有点神秘,所以代码示例会有所帮助:

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类的“Product”属性更喜欢什么名称?

你能说出来吗: - 产品(现在就像) - 所有者 - 属于 - 别的什么?

3 个答案:

答案 0 :(得分:2)

产品。

如果您有很多这样的类,并希望一般地遵循backrefs,则从具有抽象方法parent()的HasParent接口继承,并让父级继承父接口。但是,除了对象图或通过强制转换之外,您对父母的处理并不多。

编辑:实际上,让我修改一下。我参与了一个项目,我们有一个半复杂的对象图,由于一些糟糕的计划和一些需求变化,有时我必须跨越图形来从关联对象获取数据。 ComponentCost将其父对象的Cost设置为其子EntryInfo,将其子ComponentCustomsInfo改为其查找表DutyCalculation。 (是的,我没有做原设计,所以不要对我皱眉。)

parent()方法可能会更加通用。 (最后我把一组枚举(Java枚举,所以这些单例类)放在一起,它以一种类型安全甚至优雅的方式遍历图形。但是,让父母实现更简单。)

答案 1 :(得分:2)

产品 - 没有歧义,命名也是一致的 - 产品无处不在。

如果从外面访问该物业,我更愿意这样:

price.Product.Name

比这个:

price.Owner.Name

答案 2 :(得分:1)

Parent是一个相当通用的术语我经常觉得有用 - 但Product也能很好地运作。