Я думаю, что диаграмма классов всегда должна использоваться для документирования кода. Я не думаю, что если вы посмотрите на код напрямую, вы сможете увидеть полную архитектуру. Я согласен, что если вы написали код самостоятельно или работали над ним в течение длительного времени, вы можете понять, но каждый раз, когда возникает новый спрос, вам нужно каждый раз смотреть на код и искать, куда добавить этот новый код.
То, что мы делаем в нашей компании - это представление диаграмм классов нашего проекта. На самом деле мы не тратим время на моделирование, а используем диаграмму классов только для визуализации кода после обратного инжиниринга. Если код изменяется, то существует механизм слияния, и мои диаграммы классов всегда обновляются.
Что замечательно, так это возможность добавлять комментарии, ограничения в диаграмму в дополнение к документу Java. Мы переворачиваем проект, затем создаем модель и, наконец, извлекаем представления из модели, отображаемой в виде диаграмм классов UML. Я не пишу код на этом этапе, но получаю предварительный анализ архитектуры кода и работаю над этим, чтобы создать или расширить мою текущую архитектуру. Если мне это нравится, я нажимаю кнопку, и мой существующий код сливается с моими диаграммами. Я имею в виду слияние и, конечно, не полную генерацию кода. Только дельта между существующим кодом и моими диаграммами написана, а не полный код каждый раз.
Я много лет учусь, имею степень магистра и все еще работаю с кодом, но я не хочу просто быть автором java и хотел бы использовать свой мозг немного больше. Представления UML дают мне то, что мне нужно, чтобы думать о своей архитектуре, общаться с другими членами команды и создавать лучшую архитектуру, не используя разработку, управляемую моделями, а лишь разницу между существующим написанным вручную кодом и графически создавая диаграммы классов. Я создаю свою архитектуру на уровне кода, затем обращаюсь к ней и смотрю на модель. Я создаю представления и пытаюсь улучшить свою архитектуру непосредственно в коде, затем снова обращаюсь к ней и вижу, что сделано, и т. Д. Это постоянная итерация без генерации кода, основанного на модели, но с прямой синхронизацией или слиянием между кодом и UML. Что мне нравится, так это то, что код управляет UML и, конечно, не наоборот.