Критика паттерна «Тестер»
Паттерн «Тестер», основанный на Presenter, Interactors, Decorators и Router, структурированных с помощью Entity, имеет, на мой взгляд, существенный недостаток. Использование плоских объектов (Entity) для представления предметных объектов делает систему хрупкой. Удаление Entity разрушит всю систему, поскольку Presenter, Interactors, Decorators и Router станут бессмысленными. В геймдеве, где объекты обладают динамическими свойствами (движение, взрывы, стрельба), такой подход неэффективен.
A.S.S. — All Strings Safe: паттерн на основе строк
A.S.S. (All Strings Safe) — это паттерн, в котором все данные хранятся в строках. Это обеспечивает динамичность и слабое связывание кода. Строка представляет собой множество символов, кодирующих различные свойства.
Например, для представления игрока (Player) используется строка. Добавление движения осуществляется методами, изменяющими строку. Инициализация игрока: x:10;y:20.
Для доступа к свойствам используются методы getPlayerX() и getPlayerY(), разбирающие строку и возвращающие значения. Добавление новых свойств и методов не нарушает существующий код, обеспечивая гибкость.
<p>Инициализация игрока: <code>x:10;y:20</code></p>
<p>Методы доступа: <code>getPlayerX()</code> и <code>getPlayerY()</code></p>
Изменение позиции игрока происходит путем разбора строки, модификации значения x и последующей сборки строки.
Мутабельность строк — преимущество паттерна. Он использует современные идеи объектно-ориентированного программирования, избегая сложностей и ошибок, связанных с Entity.
Добавление новых свойств (например, здоровья) осуществляется путем расширения строки и создания соответствующих методов доступа (например, getPlayerHealth()).
Шины взаимодействия
A.S.S. использует шину взаимодействия, обрабатывающую изменения данных.
Паттерн A.S.S. предлагает альтернативный подход к объектно-ориентированному программированию в Unity, заменяя Entity строками для повышения гибкости и динамичности. Этот подход упрощает код, уменьшает количество ошибок и позволяет легко добавлять новые функциональные возможности.