Мне не нравится весь этот стиль кодирования типа «включи» по нескольким причинам. (Приведены примеры, относящиеся к моей отрасли, разработке игр. Заранее извиняюсь. :))
Во-первых, я думаю, что неаккуратно иметь разнородную коллекцию предметов. Например. Я мог бы иметь коллекцию «всего и везде», но затем при итерации коллекции, чтобы применить эффекты от пуль, или огненный урон, или вражеский ИИ, я должен пройти этот список, в основном это вещи, которые мне не нужны. ИМХО гораздо «чище» иметь отдельные коллекции пуль, бушующих огней и врагов. Обратите внимание, что нет причин, по которым я не могу иметь один элемент в нескольких коллекциях; во всех трех этих списках можно упомянуть одну горящую роботизированную ракету, чтобы выполнить части своего «обновления» в соответствии с тремя типами логики, которые ей необходимо запустить. Помимо наличия «единой коллекции, которая ссылается на все», я думаю, что коллекция, содержащая все повсюду, не очень полезна; вы ничего не можете сделать с чем-либо в списке, если не сделаете запрос на то, что он может сделать.
Я ненавижу делать ненужную работу. Это действительно связано с вышесказанным, но когда вы создаете заданную вещь, вы знаете, каковы ее возможности (или можете запросить их в тот момент), так что вы могли бы также воспользоваться возможностью в то время, чтобы поместить их в нужные более конкретные коллекции , У вас есть 16 мс, чтобы обрабатывать все в мире, вы хотите тратить свое время на работу, запросы и выбор из общих вещей, или вы хотите заняться бизнесом и работать только с конкретными вещами, которые вас интересуют?
По моему опыту, преобразование кодовой базы из универсальной операции над гетерогенными наборами данных в ту, которая имеет однородные наборы данных, привело не только к повышению производительности, но и к увеличению понимания, которое происходит из-за того, что более простой код выполняет более очевидную работу и в целом уменьшает объем кода, необходимого для выполнения любой данной задачи.
Так что да, догматично говорить, что запросы к интерфейсам - это плохо, но кажется, что все упрощается, если вы можете понять, как избежать необходимости запрашивать что-либо. Что касается моих заявлений о «производительности» и контраргумента, что «если вы не измеряете это, вы не можете ничего сказать об этом», то должно быть очевидно, что не делать что-то быстрее, чем делать это. Независимо от того, важно это или нет для отдельного проекта, программиста или функции, зависит от человека, имеющего редактор, но если я смогу упростить код и при этом заставить его выполнять меньше работы для тех же результатов, я собираюсь сделать это не удосужившись измерить.