Как лучше определить отношение агрегации? - PullRequest
0 голосов
/ 16 июня 2011

Извините, я не смог найти лучший формат для вопроса.

У меня есть два класса (Дизайн, Цвет)

Класс дизайна может иметь много цветов, и для каждого цвета дизайн может указывать некоторые атрибуты, например имя для комбинации (Design-Color).

и затем у меня есть класс Fabric, в котором есть комбинация Design-Color.

как правильно реализовать такие отношения между этими классами?

Вот предложенная модель (что я считаю неправильным):

class Design {
   public string Name { get;set;}

   public int StringNumber {get;set;}

///some other properties.
}

class Color {
   public string Name { get;set;}

///some other properties.
}

class ColoredDesign {
public Color Color { get;set;}

public Design Design { get;set;}

public string ColoredDesignName { get;set;}

public string WashingWay { get;set;}
}

class Fabric {
public ColoredDesign {  get;set;}

public float Length { get;set;}
}

отсутствует связь между дизайном и цветом, которые определяют возможные цвета одного дизайна.

Приложение для фабрики тканей,

Сначала они определяют дизайн и его цвета, а также определяют способ подготовки каждого цвета в указанном дизайне с помощью свойства, называемого способом стирки, и многие другие свойства, уникальные для каждого цвета в каждом дизайне.

поэтому каждая ткань должна указывать, к какому цвету и дизайну она относится.

например: допустим, у меня есть дизайн с именем (A) и имеет следующие цвета:

  • Красный: ColoredDesignName: (A-RD), способ стирки: W1
  • Зеленый: ColoredDesignName: (A-GN) Способ стирки: W2
  • Синий: ЦветнойДизайнИмя: (A-BL) Способ стирки: W3

и тогда у меня может быть Ткань, которая имеет (A-RD) и имеет длину 100M.

и другая ткань (A-BL) и длиной 200 м.

Ответы [ 2 ]

0 голосов
/ 19 июня 2011

Я предлагаю вам сделать свойство public Color[] AvailableColors{get;set;} в классе Design, чтобы выразить доступность дизайна в определенных цветах. Тогда в Fabric вы можете иметь два свойства для Дизайна и Цвета и проверить в бизнес-логике, является ли цвет ткани одним из доступных цветов дизайна. Я рекомендую вам удалить класс ColoredDesign, потому что IMO реальная связь между Дизайном и Цветом не имеет смысла без Fabric. Если по какой-либо причине вы настаиваете на наличии класса ColoredDesign, вам следует проверить цвет ColoredDesign вместо Fabric, как я упоминал ранее. Если вы сохраните ColoredDesign, это будет выглядеть следующим образом:

enter image description here

0 голосов
/ 19 июня 2011

Нелегко ответить на ваш вопрос, потому что есть недостающая часть, которая связана с бизнес-требованиями, которые часто определяют дизайн. Я занимаюсь DDD уже несколько лет, и при создании модели мне очень помогает бизнес-язык (перевод на UL) и требования, которые я должен учитывать.

Я не уверен, что вы беспокоитесь о DDD, но по вашему вопросу я могу сказать, что вы на хороших треках. Для меня отношения между дизайном и цветом могли бы быть, например, абстракциями ColoredDesign или ColouredDesign. Дизайн и цвет - это лишь часть, из которой вы создаете другую абстракцию, которая важна для вашей модели. Таким образом, ваш класс Fabric - это очень хорошая вещь, которую вы представили. Он может содержать логику создания объектов ColouredDesign, содержать ограничения на его конструкцию и так далее. Тогда клиент не заботится о логике создания и не связан с творческими ограничениями объектов, которые он потребляет.

Так что из немногих деталей, которые я могу прочитать в вашем вопросе, я думаю, что это жизнеспособный дизайн. Возможно, у других есть другая точка зрения на это.

...