Вот интересно стало, насколько связаны и коррелируют между собой DDD и DSL? Одна из сильных сторон DDD заключается в том, что программные модели формулируются на едином языке, максимально близком к понятиям предметной области - домена. Это позволяет минимизировать искажения при преобразованиях понятий и требований. Насколько я понимаю, DSL решает примерно те же задачи, но чуть с другой стороны. Тут не важно, как программа устроена внутри, фокус именно на языке, который позволяет описывать происходящее в терминах предметной области.
В студенческие годы на вычислительном практикуме я писал программу, которая решала систему линейных уравнений методом то ли вращений, то ли отражений, уже не помню. Как правило, подобные учебные программы пишутся "в лоб", в терминах массивов, переменных и действий с ними. Читать такую программу сложно, текст программы даже близко не напоминает формулы из учебника. Если что-то не работает, то понять где именно ошибка крайне сложно...
А я тогда как раз научился переопределять операторы в С++, так что мне захотелось "сделать красиво". Я написал классы вектора, матрицы, определил для них операторы сложения и умножения, добавил нужные методы для транспонирования, вычисления нормы и т.п. Каждый из этих методов был достаточной простой и очевидный. Благодаря им, функция, реализующая метод решения системы уравнений, выглядела почти дословной копией строки учебника.
Да, я потратил несколько дней на отладку операторов и методов работы с матрицами. Зато сам численный метод, благодаря получившемуся DSL, я реализовал и отладил буквально за 15 минут.
Post #62
233
- 👍 4