---
# System prepended metadata

title: TicTacToeDemo review

---

# TicTacToeDemo review

1. Нет реализации и не используется.
![](https://i.imgur.com/p5cGGHf.png)

2. При взаимодействии с ObjectFac необходимо всегда делать проверку есть ли такой ресурс (проверка указателя на nullptr). У нас в проекте зачастую мы используем макрос VLIB_ASSERT при конфигурации чего-либо.
![](https://i.imgur.com/QOsYKgq.png)
![](https://i.imgur.com/1q0F3cV.png)
![](https://i.imgur.com/OxH2pkr.png)
![](https://i.imgur.com/Tq5rbT8.png)

3. Тут лучше проверять на валидность указателя через if
![](https://i.imgur.com/E1Kvq7r.png)
Для таких случаев лучше всего:
- создать поле класса каунтера
- инициализировать его, обращаясь к ObjectFac
- проверить успешность инициализации через VLIB_ASSERT
- в коде обращаться уже непосредственно к полю класса, проверяя валидность указателя через if

4. Стоит избегать "магических" чисел, заменять на именованные constexpr константы. Если используются 1 раз - то внутри функции, если 2 и больше раз, то в анонимном неймспейсе в cpp файле.
![](https://i.imgur.com/opBc8u5.png)

5. Для чего это?
![](https://i.imgur.com/CHPaNlv.png)
можно присвоить nullptr и обеспечить корректный релиз, если это нужно

6. Лучше использовать std::array ![](https://i.imgur.com/AIgnMHD.png)
А в перспективе для игр - vector, так как мы стремимся к повторному использованию кода и с динамической памятью проще делать адаптивную архитектуру. Но это так, на будущее, в первой игре нужно будет сделать все максимально просто, главное - понять основные принципы.

7. Тут можно применить паттерн Стратегия
![](https://i.imgur.com/15W4qTp.png)

8. Логику обработки комбинаций также лучше вынести в отдельную сущность и использовать композицию.


Форматирование
-------------
1.Необходимо контролировать отступы и не жалеть скобочек. Очень важна читаемость кода.

![](https://i.imgur.com/UTcRbmN.png)

![](https://i.imgur.com/xqzlOsn.png)

![](https://i.imgur.com/88T3xTm.png)

![](https://i.imgur.com/zNf8VS3.png)


2. Длина строк. У нас нет четкого ограничения, но нужно стараться, чтобы строка вмещалась в область видимости основного поля.
![](https://i.imgur.com/GVPyPPx.png)
