Comments 6
В качестве плюсов, вероятно, стоит упомянуть лучшее использование памяти, так как при обработке системой нужных компонентов, вы не тяните за собой ненужные данные, что уменьшает вероятность, например, промахов кеша.
Тем не менее, в конкретно вашем примере, вы обрабатываете Entity целиком, когда нужно обрабатывать только сами компоненты, иначе вы не получаете такого преимущества и выполнение становится медленнее. Да и тестирование становится чуть сложнее, так как для этого вам приходится все равно создавать и тянуть ещё и Entity, но при этом не так очевидно, так как на вход подаются не компоненты, из-за чего мы не знаем, что именно необходимо для тестирования.
Хотя у меня не так много глубоких знаний по ECS или я что-то не правильно растолковал, могу ошибаться. Жду комментов по этому поводу.
Да, для тестирования это было бы большим плюсом. Но для такого случая в движке вместо цикла придется перебирать все системы вручную передавая в метод обработки каждой системы — компоненты, в качестве аргументов ее метода обработки, с указанием типа каждого компонента. Код поиска компонента для конкретного Entity все равно никуда не денется. Плюс к тому же перед вызовом каждого метода обработки каждой системы придется писать проверку "может ли эта система обработать эту сущность?".
И ещё стоит отметить что в некоторых системах может происходить работа с удалением или добавлением Entity/Component так что сам по себе Entity пригодится при обработке.
А для тестов нужна документация системы с описанием ее работы и требования к входящему Entity.
Разрабатываем игры на LibGDX с помощью шаблона Entity Component System