Что я имею в виду, так это то, что иногда архитекторы стремятся упростить и улучшить тестируемость за счет других важных сил.
Например, я просматриваю очень сложное приложение, сделанное таким образом, путем широкого использования шаблонов проектирования, которые чрезмерно способствуют тестированию, например. IoC, DI, АОП и т.д.
Теперь, как правило, мне нравятся эти вещи, но эта система должна быть намного проще - хотя и не просто простой интерфейс для CRUD на db, но он все еще не намного сложнее, чем это (даже учитывая некоторые внутренние рабочие процессы, процессы и т.д.). С другой стороны, просто просмотр кода становится серьезной болью в heinie, едва читаемым (хотя его хорошо написано), и кодирование его, должно быть, было болью.
Реализованная сложность - это явный нарушитель KISS (принцип, а не группа)... и "единственное" преимущество - улучшенная тестируемость, использование тестовых фреймворков и mocks и...
Теперь, прежде чем вы, поклонники TDD, скажете мне, я не умаляю важность тестируемости, но я задаю вопрос о превосходстве рассмотрения этой конкретной силы (против всех остальных).
Или я что-то пропустил?
Я хотел бы добавить еще один момент - мне кажется, что все эти разговоры о "тестируемости" касаются, в частности, модульного тестирования, который отличается от общего тестирования системы и может привести к в пропущенных тестах, когда отдельные единицы объединены вместе. По крайней мере, это кажется точкой IoC/DI для тестирования...
Кроме того, я хотел бы указать, что эта система (и другие, которых я видел проповедью) имеет только один конкретный объект для каждого интерфейса, а IoC/DI предназначен только для - вы догадались - заменяя конкретные объекты тестируемыми макетами для только тестирование.
Я почувствовал необходимость добавить эту цитату из Википедия на IoC:
В то время как опасность в процедурном программировании заканчивалась кодами спагетти, опасность при использовании инверсии управления заканчивается кодом макарон
Yup, это выражает мое чувство именно: D