Силлогизм:
Общность дорогая.
Вы тратите деньги других людей.
Поэтому расходы на общность должны быть обоснованы для заинтересованных сторон.
Спросите себя, действительно ли вы решаете более общую проблему, чтобы потом сэкономить деньги заинтересованным сторонам, или вы просто находите интеллектуальную проблему в принятии излишне общего решения.
Если общность определена как желательная, она должна быть разработана и протестирована, как и любая другая функция . Если вы не можете написать тесты, которые демонстрируют, как реализованная вами общность решает проблему, требуемую спецификацией, не беспокойтесь об этом! Функция, которая не соответствует критериям проектирования и не может быть протестирована, - это функция, на которую никто не может положиться.
И, наконец, не существует такого понятия, как «как можно более общее». Предположим, вы пишете программное обеспечение на C # только для аргументации. Собираетесь ли вы заставить каждый класс реализовывать интерфейс? Каждый класс абстрактный базовый класс с каждым методом абстрактный метод? Это довольно общее, но это далеко не «как можно более общее». Это позволяет людям изменять реализацию любого метода с помощью подклассов. Что если они захотят изменить реализацию метода без создания подклассов? Вы можете сделать каждый метод на самом деле свойством типа делегата с установщиком, чтобы люди могли изменить каждый метод на что-то другое. Но что, если кто-то захочет добавить больше методов? Теперь каждый объект должен быть расширяемым.
На данный момент вы должны отказаться от C # и принять JavaScript. Но вы все еще не получили достаточно общего; Что делать, если кто-то хочет изменить, как поиск членов работает для этого конкретного объекта? Может быть, вы должны написать все на Python вместо этого.
Повышение универсальности часто означает отказ от предсказуемости и массовое увеличение затрат на тестирование, чтобы гарантировать, что реализованная универсальность действительно успешно удовлетворяет реальные потребности пользователей . Оправданы ли эти затраты их преимуществами для заинтересованных сторон, которые за них платят? Возможно, они есть; Это зависит от вас, чтобы обсудить с заинтересованными сторонами. Мои заинтересованные стороны совсем не хотят, чтобы я отказался от статической типизации в поисках совершенно ненужного и чрезвычайно дорогого уровня общности, но, возможно, ваш.