Giter VIP home page Giter VIP logo

game-of-life's People

Watchers

Yulia Tsareva avatar

Forkers

gskolesnikov

game-of-life's Issues

Третий релиз

  • Багфиксы и тесты
    • Пофиксить баг с установкой iters_count=-1 из командной строки.
      Интересно: если поменять в конфигурационном файле, то почему-то работает
    • Больше тестов и тестового покрытия богу юнит-тестов! (долг со второго релиза, см. #4)
  • Фичи
    • Выгрузка результатов симуляции в файл (долг со второго релиза, см. #4)
    • Добавление фигур (команда add_figure)
    • Цветной вывод живых и мертвых клеток (ANSI escape-коды терминала)
    • Изменение правил работы автомата (тоже CLI-командой?)
  • Инфраструктура

Комментарии по ОО-дизайну

@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 photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.