Вопрос о типе отношений диаграммы классов UML - PullRequest
1 голос
/ 06 марта 2009

У меня есть класс данных со следующими методами:

  • ExecuteUDIQuery (запрос строки)
  • ExecuteSelectQuery (запрос строки)
  • ExecuteSP (строка anme, строка [,] params)

У меня есть много классов, которые используют класс данных. Теперь я хочу создать диаграмму классов, но я не знаю, какое отношение имеют классы к классу данных. Это композит? Это 1: 1 или ..?

Примером класса, который использует класс данных, является класс Staff. Этот класс имеет метод Load (), который загружает объект персонала с идентификатором сотрудника. Этот метод содержит запрос, который передается методу ExecuteSelectQuery (строковый запрос) класса Data.

EDIT: Класс данных не является статичным. Однако у меня есть сомнения. Я на самом деле не знаю, что делать. Дело в том, что он выполняет только запросы и возвращает результаты.

Ответы [ 8 ]

3 голосов
/ 06 марта 2009

Я бы предложил использовать зависимость.

См. здесь для краткого описания.

1 голос
/ 06 марта 2009

Я бы запросил имена ваших классов. имя класса обычно должно быть существительным в единственном числе. Примеры;

  • Окно
  • лицо
  • Сделка

Данные - множественное число, и в любом случае я думаю, что это должна быть база данных.

Аналогично для персонала - еще раз множественное число, я думаю, что это должен быть MemberOfStaff. Если, конечно, это не список сотрудников, в этом случае я бы назвал его чем-то вроде Отдела, Проекта или Отдела - что бы ни указывал ваш проблемный домен.

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

0 голосов
/ 24 марта 2009

Зависимость и использование - два самых слабых вида «соединителей». Вы можете рассмотреть стереотипы, ключевые слова, чтобы уточнить отношения. Вы можете обнаружить, что создание экземпляров, вызов, создание, отправка стереотипов работают. Без дополнительной информации, хотя правильный ответ, кажется, использование.

0 голосов
/ 06 марта 2009

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

Мы тоже - вы только описали класс данных и не сказали, как персонал получает данные, которые он использует.

Если Staff удерживает один или несколько экземпляров класса данных, то существует либо связь между Staff и Data, либо у Staff есть атрибут типа Data (если Data имеет семантику значений).

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

Если X не удерживает экземпляры данных, которые он использует, тогда отношение использования является подходящим.

0 голосов
/ 06 марта 2009

Недостаточно данных.

Дайте нам некоторые схемы классов или что-то в этом роде. Из того, что я вижу, я бы на самом деле не назвал это классом данных (он больше похож на данные accessor ), который звучит так: может быть одноэлементным (многие: 1 , агрегация или ассоциация), или, в случае экземпляра, будет компонент 1: 1.

0 голосов
/ 06 марта 2009

Я не могу не комментировать ваш общий дизайн, я постараюсь переместить метод Load из класса Staff, чтобы этот класс не зависел напрямую от класса Data.

В рамках существующего дизайна я бы предложил следующее: Если класс персонала содержит переменную экземпляра класса данных, то это ассоциация. Если экземпляр класса создается только для извлечения экземпляра, это просто зависимость заданного типа, как говорит @toolkit.

0 голосов
/ 06 марта 2009

Создан ли класс классами, которые его используют, или методы являются статическими? Если они статичны, я бы представлял это как неквалифицированную зависимость (пунктирная стрелка, указывающая от классов, использующих класс данных к классу данных)

Если классы, использующие класс данных, создают свои собственные частные экземпляры этого класса, это будет композиция 1: 1 (при условии, что жизненный цикл экземпляра класса данных привязан к объекту, который его использует)

0 голосов
/ 06 марта 2009

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

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

Я использую отношения 1 на 1 во всех остальных случаях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...