Как вы говорите, события - отличный инструмент для уменьшения связи между классами; поэтому, хотя это может потребовать написания дополнительного кода на некоторых языках без встроенной поддержки событий, оно уменьшает сложность общей картины.
События, возможно, являются одним из наиболее важных инструментов в ОО (согласно Алану Кейу - объекты связываются, отправляя и получая сообщения ). Если вы используете язык, который имеет встроенную поддержку для событий, или рассматриваете функции как первоклассных граждан, то использовать их не составит труда.
Даже в языках без встроенной поддержки количество шаблонов для чего-то вроде шаблона Observer довольно минимально. Вы можете найти где-нибудь приличную универсальную библиотеку событий, которую вы можете использовать во всех своих приложениях, чтобы минимизировать шаблон. (Универсальный агрегатор событий или медиатор событий полезен практически в любом приложении).
Стоит ли в маленьком приложении? Я бы сказал определенно да .
- Сохраняя классы отделенными друг от друга, ваш граф зависимостей класса будет чистым.
- Классы без каких-либо конкретных зависимостей могут тестироваться изолированно, без учета других классов в тестах.
- Классы без каких-либо конкретных зависимостей требуют меньше юнит-тестов для полного охвата.
Если вы думаете: «О, но на самом деле это очень маленькое приложение, это не имеет большого значения» , подумайте:
- Небольшие приложения иногда в конечном итоге объединяются с более крупными приложениями.
- Небольшие приложения, вероятно, будут включать в себя, по крайней мере, некоторую логику или компоненты, которые впоследствии могут потребоваться для повторного использования в других приложениях.
- Требования к небольшим приложениям могут изменяться, что вызывает необходимость в рефакторинге, что проще, когда существующий код не связан.
- Дополнительные функции могут быть добавлены позже, что вызывает необходимость расширения существующего кода, что также намного проще, когда существующий код уже отделен.
- Слабосвязанный код обычно не занимает много времени для написания, чем тесно связанный код; но тесно связанный код требует гораздо больше времени на рефакторинг и тестирование, чем слабосвязанный код.
В целом, размер приложения не должен быть решающим фактором для того, чтобы сохранить классы слабо связанными; Принципы SOLID предназначены не только для больших приложений, они применимы к программному обеспечению и кодовым базам любого масштаба.
Фактически, время, сэкономленное на модульном тестировании ваших слабо связанных классов, должно уравновешивать любое дополнительное время, затрачиваемое на разделение этих классов.