Я думаю, что это может быть спорный мета-ответ, и я немного опоздал на вечеринку, но я думаю, что очень важно упомянуть об этом здесь, потому что я думаю, что знаю, откуда вы.
Проблема с тем, как используются шаблоны проектирования, состоит в том, что, когда их обучают, они представляют такой случай:
У вас есть этот конкретный сценарий. Организуйте свой код таким образом. Вот умный, но несколько надуманный пример.
Проблема в том, что когда вы начинаете заниматься реальной инженерией, все не так уж и скучно. Шаблон дизайна, о котором вы читаете, не совсем подходит к проблеме, которую вы пытаетесь решить. Не говоря уже о том, что используемые вами библиотеки полностью нарушают все, что указано в тексте, объясняющем эти шаблоны, каждая по-своему. В результате код, который вы пишете, «чувствует себя неправильно», и вы задаете такие вопросы, как этот.
В дополнение к этому, я хотел бы процитировать Андрея Александреску, говоря о разработке программного обеспечения, который заявляет:
Программная инженерия, возможно, больше, чем любая другая инженерная дисциплина, демонстрирует богатую множественность: вы можете делать одно и то же во многих правильных способах, и между правильным и неправильным есть бесконечные нюансы.
Возможно, это немного преувеличение, но я думаю, что это прекрасно объясняет дополнительную причину, по которой вы можете чувствовать себя менее уверенно в своем коде.
В такие времена в моей голове кричит пророческий голос Майка Актона, ведущего игрового движка в Insomniac:
ЗНАЙТЕ СВОИ ДАННЫЕ
Он говорит о входах в вашу программу и желаемых результатах. И еще есть этот драгоценный камень Фреда Брукса из Мистического Месяца Человека:
Покажи мне свои блок-схемы и спрячь свои таблицы, и я буду продолжать мистифицироваться. Покажите мне свои таблицы, и мне обычно не нужны ваши блок-схемы; они будут очевидны.
Поэтому на вашем месте я бы рассуждал о своей проблеме, основываясь на моем типичном случае ввода и на том, достигает ли он желаемого правильного результата. И задавайте такие вопросы:
- Являются ли выходные данные из моей программы правильными?
- Производится ли оно эффективно / быстро для моего наиболее распространенного случая ввода?
- Достаточно ли легок мой код для локального анализа, как для меня, так и для моих товарищей по команде? Если нет, то могу ли я сделать это проще?
Когда вы это сделаете, вопрос о том, «сколько слоев абстракции или шаблонов проектирования необходимо» становится намного проще. Сколько слоев абстракции вам нужно? Столько, сколько необходимо для достижения этих целей, и не более. «А как насчет шаблонов дизайна? Я не использовал ни одного!» Что ж, если вышеуказанные цели были достигнуты без непосредственного применения шаблона, то это нормально. Заставьте это работать, и переходите к следующей проблеме. Начните с ваших данных, а не с кода.