game-of-life's People
Forkers
gskolesnikovgame-of-life's Issues
Третий релиз
- Багфиксы и тесты
- Пофиксить баг с установкой iters_count=-1 из командной строки.
Интересно: если поменять в конфигурационном файле, то почему-то работает - Больше тестов и тестового покрытия богу юнит-тестов! (долг со второго релиза, см. #4)
- Пофиксить баг с установкой iters_count=-1 из командной строки.
- Фичи
- Выгрузка результатов симуляции в файл (долг со второго релиза, см. #4)
- Добавление фигур (команда add_figure)
- Цветной вывод живых и мертвых клеток (ANSI escape-коды терминала)
- Изменение правил работы автомата (тоже CLI-командой?)
- Инфраструктура
- Сборка с помощью jlink, GraalVM native-image или Docker
Комментарии по ОО-дизайну
@yutsareva @GSKolesnikov @Avonazhrets @safiullinzufar
Случайно увидел, что в вашем проекте оказывается есть документ по ОО-дизайну:
https://github.com/yutsareva/game-of-life/blob/main/project-structure.md
Уведомлений об этом мне не приходило :-(
В следующий раз, пожалуйста, когда всё готово - призывайте меня в комменты (@nvamelichev
), заведите Issue или Pull Request. На эти события у меня настроены уведомления, а просто на коммиты в репозитории - нет (слишком шумные были бы уведомления).
В целом, дизайн неплохой, для первой итерации - в особенности 👍 👍 👍
Замечания по той версии ОО-дизайна, что я увидел:
- Высокоуровневой дизайн системы в документе перемешан с подробным описанием классов. Пожалуйста, разделите их:
- Общее описание системы - сделайте в отдельным документом;
- Описание всех подклассов и их поведения, алгоритма работы Runner - сделайте отдельным документом (если описание будет текстом) или несколькими диаграммами (если описание будет [UML-]диаграммами).
- Класс Cell:
- Для высокоуровневого проектирования: класс можно оставить "как есть", потому что концептуально сущность "Клетка" в системе есть.
- Для уточнённого проектирования: кажется, класс Cell не очень нужен. Судя по текущему набору публичных методов, это просто обёртка над логическим значением (
boolean
): жива клетка или мертва. Класс Cell можно вовсе убрать, а внутри класса Field эффективно представить строки (или столбцы) игрового поля как BitSet'ы (естественно, в публичных методах BitSet не отдавая). В таком случае, ответственность по получению состояния клетки и её изменении перейдёт в класс Field: getCell(), setCell().
- Интерфейс Rules ("правила"), стоит переименовать в Automaton ("автомат") или, точнее, CellularAutomaton ("клеточный автомат"). Название "Rules" подразумевает, что правила - основное, что есть в публичном интерфейсе класса, это то, чем он занимается. Но судя по публичному интерфейсу класса Rules - он трансформирует игровое поле и проверяет, можно ли ещё выполнить трансформацию. То есть, для пользователя он выглядит не как "набор правил", а как "клеточный автомат", работающий над прямоугольным игровым полем.
- Интерфейс Reader:
- Кажется, интерфейс описан слишком подробно. Лучше просто сказать, что у вас в системе есть класс, который умеет прочитать состояние игрового поля и правила откуда-то. Какие конкретно у него будут методы - не очень интересно, это уже детали реализации, отвлекающие от самого интересного - клеточного автомата, игрового поля и т.д.
- Возможно, недостаёт интерфейса Writer. Подумайте, возможно, логично выглядит функциональность сохранения состояния, чтобы пользователь мог продолжить "с середины", опционально немного изменив настройки? Это, кстати, выглядит как новая вполне валидная User Story для юзера который хочет позалипать над красивыми картинками. Если решите добавить такую функциональность, обновите и ОО-дизайн, и требования к проекту (user-stories.md) :-)
- Очень хочу увидеть более подробное описание поведения системы, чем цикл
while
в описании классаRunner
. Вполне можно (и даже желательно) не кодом, а UML-диаграммой (Sequence / State Machine / Activity).
Четвёртый релиз до 21.05
- Сборка одним из следующих способов: Docker-образ, GraalVM native-image, jlink)
- Настроена система непрерывной интеграции, запускающая тесты через Maven/Gradle на каждый коммит в main и на каждый коммит в пул-реквестах. CI берите любую бесплатную и интегрирующуюся с GitHub'ом: GitHub Actions, Travis CI, …
- Все члены команды хорошо знакомы с фичами продукта и могут их продемонстрировать Product Owner'у (т.е. мне :-))
Замечания по документации с семинара
- Перенести Vision и User Stories в отдельные файлики vision.md, user-stories.md
- Vision:
- прописать риски проекта
- перенести идеи про "задавать правила / начальную конфигурацию / существующие фигуры" в User Stories, это уже уточнение того, что "[Пользователь]... расставляет или генерирует начальную конфигурацию «живых» клеток..."
- Подумать и записать в Vision свои соображения, каких пользователей больше - пассивных наблюдателей (которые хотят посмотреть красивую картинку/рандомную картинку), исследователей игры "Жизнь", ...?
- Исходя из предположений о пользователях, скорректировать и расширить User Stories (см. предыдущий пункт)
Второй релиз до 23.04
- Юнит-тесты теперь обязательны (если ещё не сделаны — сделайте!)
- Починить баг с загрузкой конфигурации поля из файла
- В конце симуляции предлагать выбор: продолжить симуляцию на столько же шагов/запустить симуляцию с начала/закончить симуляцию
- Медитативный режим (бесконечное количество шагов, прерывание по Ctrl+C)
- Выгрузка результатов симуляции в файл
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.