При построении систем в программировании стоит ли группировать мини программы?
К примеру, есть программа. В этой программе есть мини программа - для примера эта мини-программа может быть игра в домино. Для этой игры естественно мы создаем некие классы, методы, функции и переменные с массивами.
Так вот. Теперь нам понадобилось создать вторую игру, тоже связанную с домино, но её разновидность - "козёл". Таким образом вытекает вопрос. Использовать ли общие сущности (массивы, классы, функции) для двух разных, но похожих игр?
Приведу пример общей сущности - двумерный массив (первое измерение - разновидности игры, второе измерение - слоты для костей каждой игры), который хранит в себе информацию о том, какая кость домино выставлена.
Или еще пример - в каждой игре нужен "банк". Можно ведь создать массив. Первая ячейка будет хранить в себе информацию о банке первой игры, вторая ячейка - о второй.
И так, теперь почему я задал вопрос. Ведь если не совмещать похожие мини-программы, то нам приходится копировать очень похожий код, а кроме того, мы тратим некоторое время на написание абсолютно идентичных сущностей программы (массивы, функции).
Копипаста - зло. Идентичные сущности - не меньшее зло. Нужно проектировать систему так, чтобы была максимальная реюзабельность.
В вашем случае "разновидность домино" подразумевает изменение только правил игры - вся логика "руки", помещения костей на стол и прочего - одна. А вот про массивы "банка" - честно не понял. Зачем хранить одновременно и тот и другой банк... Но это - детали реализации. Скорее всего у вас будет 1 класс CBank, реализующий логику банка любой игры, и если уж вам в рантайме нужен банк и той и другой игры - то будет массив экземпляров CBank. Например.
Цвет - это просто параметр. Если угодно - это загружаемая картинка. Но логика поведения - одна. Кость может быть в руке или лежать на столе в определенных координатах. Все. Это и есть класс - сущность с одинаковым поведением и набором параметров, но с потенциально разными значениями параметров.
Ну выносите все в сервисы(если это возможно), как сейчас модно.
Или вы переживаете что сделав домино, в следующем похожем проекте будет копипаста?
Ну это нормально, часть наработок вы перенесете, еще улучшите.
Если совсем хочется "кошерности", то выделяйте все ваши общие наработки во фреймворк, и таскайте его из проекта в проект. Отличие будет в том, что если вы достаточно сильно заморочитесь, вы сможете вводить новые версии фреймворка в старые проекты и они заработают "круче", но не забываем о регрессии и даже если у вас все везде покрыто тестами(а это не так ;)) все равно есть шанс что вы свалите свое старое но стабильное приложение.