Код: Выделить всё
structВ коде идентификаторы реализованы с использованием шаблона на основе тегов для обеспечения безопасности типов:
Код: Выделить всё
template
class Id {
// some fields
};
struct AxisIdTag {};
struct RunIdTag {};
struct ReportIdTag {};
struct RecordIdTag {};
using AxisId = Id;
using RunId = Id;
using RecordId = Id;
using ReportId = Id;
Код: Выделить всё
enum class ErrorCode {
// some fields
};
struct Error {
ErrorCode code{};
std::string summary;
std::optional details;
std::optional axisId;
std::optional runId;
std::chrono::system_clock::time_point timestamp;
};
Цель диаграммы классов — не отразить синтаксис C++ однозначно, а сообщить о замысле проекта:
- что AxisId, RunId и т. д. являются отдельными идентификаторами домена,
- которые все они основаны на общей абстракции Id,
- безопасность типов является преднамеренной частью дизайна,
- и что некоторые типы (например, Error) предназначены для использования в качестве носителей данных/подобных значениям объектов домена.
Вопрос
Каков идиоматический или общепринятый способ представления следующего на диаграмме классов UML?
- Типы строгих идентификаторов на основе шаблонов, такие как Id
- Псевдонимы типов, такие как AxisId, RunId и т. д.
- Обычные структуры данных (), которые в первую очередь действуют как неизменяемые или полунеизменяемые носители данных.
Код: Выделить всё
struct
- Должен ли Id отображаться как класс шаблона с привязками к шаблону?
- Должны ли AxisId, RunId и т. д. моделироваться как специализации шаблона, стереотипы (например, ) или опущено и задокументировано в примечаниях?
- Должна ли структура Error моделироваться точно так же, как класс UML, или аннотироваться стереотипом, таким как или , ?
- Существует ли предпочтительный способ сбалансировать ясность модели предметной области и перегрузить диаграмму реализацией, специфичной для C++ подробности?
Я был бы признателен за рекомендации о том, разумно ли этот подход передает предполагаемый дизайн, и какие альтернативы могут быть более ясными или более идиоматичными в UML.
Подробнее здесь: https://stackoverflow.com/questions/798 ... a-structur
Мобильная версия