Отфильтровав ранее выделенные АТД по специальным правилам проектирования, на каждом шаге смог найти следующие лишние классы.
Move - Bridge - Передает и высчитывает результат хода каждого игрока(человека или NPC).
Название является глаголом, но как бы мне его заменить? Создать интерфейс взаимодействия двух бойцов для битвы? По сути это он и был.
Товар на полках магазина - HashMap.
Товар на полках магазина - не подходит, так как просто является полем в классе магазина. Возможно потребуется только для обертки над базовой коллекцией.
Тут наибольшее число классов и наименьшее кол-во их для отсеивания. Некоторые сомнения вызывал:
BattleResult - Итог боя - отчет.
Но он кроме переданных в него аргументов так же занимается тем, как отобразить их, пусть даже для этого генерирует HTML/CSS и JS, все таки это поведение инкапсулирется в нем.
По признаком, по которым стоит отделять ненужные классы отбраковал:
1/3 классов проектирования Так же под вопросом был Timer, но если не вводить его, то надо разделять это состояние времени по всем остальнымм классам, либо добавлять его в контейнер. Тем не менее, даже в контейнере это стоило бы вынести в отдельный класс.
Timer - Singleton - С начала входа в систему и в любом ее месте продолжается отсчет времени, которое еще можно провести в игре.
Timer - не подходит по причине того, что делает что-то определенное - отсчитывает время и прерывает выполнение программы при определенных условиях, когда работа законченна. Тем не менее, это одна из основных задач игры. Возможно это должно находиться в классе Application, с которого все стартует?
1/4 классов реализации
1/12 классов анализа
Из чего можно заметить, что больше всего лишнего было добавлено на шаге проектирования :).