Как вы называете свойства «обратная ссылка»? - PullRequest
0 голосов
/ 07 апреля 2009

Я работаю над проектом, который имеет богатую модель домена.

Некоторые из моих классов имеют коллекции других типов, а у других типов есть свойство, которое ссылается на их «владельца». Возможно, это звучит немного загадочно, поэтому поможет пример кода:

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;}
}

Вопрос в том, какое имя вы предпочитаете для свойства 'Product' класса ProductPrice?

Вы бы назвали это: - Продукт (как сейчас) - владелец - Принадлежит - что-то еще?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2009

Продукт.

Если у вас много таких классов, и вы хотите в общем следовать обратным ссылкам, наследуйте от интерфейса HasParent, который имеет абстрактный метод parent (), а родители наследуют для интерфейса Parent. Но в остальном, следуя графу объектов или приведению типов, мало что можно сделать с Родителем.

РЕДАКТИРОВАТЬ: на самом деле, позвольте мне изменить это. Я работал над проектом, в котором у нас был полусложный граф объектов, и из-за плохого планирования и некоторых изменений требований иногда мне приходилось тянуться по всему графику, чтобы получить данные из связанного объекта. ComponentCost для его родительского элемента Cost для его родительского элемента, для его дочернего CustomsInfo для его дочернего ComponentCustomsInfo для его таблицы поиска DutyCalculation. (Да, я не делал оригинальный дизайн, так что не хмурись на меня.)

Метод parent() мог бы сделать это немного более общим. (В конце концов я собрал набор перечислений (перечисления Java, то есть одноэлементные классы), которые прошли для меня график безопасным и даже элегантным способом. Тем не менее, наличие родителя сделало бы реализацию проще.)

2 голосов
/ 07 апреля 2009

Продукт - нет никакой двусмысленности, и название соответствует: продукт остается везде.

Если вы обращаетесь к собственности извне, я бы предпочел иметь это:

price.Product.Name

чем это:

price.Owner.Name
1 голос
/ 07 апреля 2009

Parent - это довольно общий термин, который я часто нахожу полезным, но Product тоже отлично работает.

...