В пасьянсах используются карты.
Итак, вы думаете о классе карты. Вы пишете несколько тестов для отдельных объектов Карты. Вы пишете класс карты для прохождения тестов.
Вам нужна колода, которая тасует и раздает в макете. Вы думаете о классе Deck и алгоритме shuffle и о том, как он поддерживает состояние для игры. Вы пишете несколько тестов для колоды, которая тасует и раздает. Вы пишете свой класс Deck для прохождения тестов. [Примечание: для этого требуется фиктивный генератор случайных чисел, который на самом деле не является случайным.]
Пасьянсы включают макет с пустыми местами и карточками. Некоторые пустые места правил (только короли или только тузы). В пасьянсах иногда используются запасы, более или менее остатки колоды.
Итак, вы думаете о классе Layout с пробелами для карточек. Вы пишете несколько тестов для макета и кладете в разные карты. Вы пишете свой класс Layout для прохождения тестов.
Тогда есть правила относительно того, какие карты можно перемещать из макета. Целые колоды, субстеки, топ-карты, что угодно. У вас есть AllowedMove или GameState или какой-то такой класс. Та же тренировка. Определите, что он делает, напишите тесты, закончите урок.
У вас есть пользовательский интерфейс и отображение материала. Дрель такая же.
Грубый класс.
Определить тесты.
Завершить занятие.
и т.д.
Я подробно расскажу об этом в книге по OO Design .