Я большой сторонник разработки для рассматриваемой проблемы и не срываю ваш дизайн, пытаясь угадать все случаи, которые вы должны учитывать, потому что «когда-нибудь нам это может понадобиться».
По сути, учитывая список конкретных требований, сопоставьте их с тем, однако, это не означает, что вы не должны:
- сделать аспекты вашего проекта настраиваемыми, а не жестко кодировать эти аспекты в вашем решении. Либо через параметры, передаваемые во время выполнения, либо через внешнюю конфигурацию, читаемую при запуске (или после HUP'ing).
- зашнуровать код магическими числами,
- не смотрите, не написано ли уже что-то, что вы можете использовать повторно, возможно, после адаптации существующего решения, чтобы обеспечить подход, подходящий как для существующей ситуации, так и для новых требований.
Основная проблема с проектированием «возможных вариантов будущего» заключается в том, что вы всегда просто угадываете. Возможно, сделать обоснованные догадки, но «когда толчок приходит в ход», это все еще только серия догадок.
Делая это, у вас также есть реальная возможность сжать ваше решение, чтобы соответствовать общему случаю (ам), а не решить конкретную проблему под рукой, как это определено вашими известными требованиями.
Что это говорит? «Когда у тебя есть только молоток, все начинает выглядеть как гвоздь».
Хотелось бы, чтобы у меня был фунт за каждый раз, когда я слышал, как кто-то говорит: «Но это решение более адаптируемо для тех общих случаев, которые мы можем увидеть в будущем».