Как работать с вопросами с тегами на диаграмме классов

Если бы у меня был клон приложения Stackoverflow, у меня было бы два класса: Question и Tag, и отношение между ними было бы «многие ко многим».

Как бы я смоделировал это на диаграмме классов? Могу ли я создать между ними класс?

Примечание. Я пытаюсь применить DDD, поэтому Question и Tag будут сущностями

заранее спасибо


person bu3abed    schedule 22.01.2021    source источник
comment
Если вы пытаетесь применить DDD, не создавайте просто модель данных. Сосредоточьтесь на поведении и инвариантах. Добавление, удаление тегов и то, что должно происходить со старыми вопросами, когда теги меняются с течением времени (переименованы, обновлено описание, тег отключен / заархивирован / запрещен и т. Д.). Это то, что приведет вас к правильному дизайну: рассмотрение агрегации против композиции и значений против сущностей.   -  person plalx    schedule 23.01.2021


Ответы (1)


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

Могу ли я создать между ними класс?

Если вопрос касается UML (диаграммы классов) вне реализации с использованием Sql или любой другой базы данных, то ответ будет нет.

В этом контексте я не вижу причин для создания ассоциации классов, поэтому, если у вас есть классы Question и Tag и связь, просто

введите описание изображения здесь

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

введите описание изображения здесь


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

введите описание изображения здесь

поскольку таблица уникальна, атрибут table может быть определен на уровне класса (static), но также возможно не иметь этих атрибутов table и, вероятно, эта таблица одноэлементная

введите описание изображения здесь

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

введите описание изображения здесь

Промежуточный способ - использовать класс-ассоциацию

введите описание изображения здесь

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

person bruno    schedule 22.01.2021