Для обработки данных, в систему могут подтягиваться дополнительные зависимости. Если обработка будет в компоненте то каждому созданному компоненту придется передавать зависимости при создании(или переиспользовании). Так же каждая система может одновременно обрабатывать несколько компонентов одной сущности, к примеру элементарный рендер, что бы система могла что-то отрисовать ей необходимы координаты сущности и ее текущий спрайт для отрисовки. Координаты, к примеру, у нас в TransformComponent, а спрайт в SpriteComponent. Вы можете спросить «А почему бы не объединить координаты и спрайт в один объект?», потому что спрайт нужен чаще всего только в системе отрисовки, а координаты, к примеру, еще в системе перемещения(для их обновления в соответствии с скоростью движения).
Да, для тестирования это было бы большим плюсом. Но для такого случая в движке вместо цикла придется перебирать все системы вручную передавая в метод обработки каждой системы — компоненты, в качестве аргументов ее метода обработки, с указанием типа каждого компонента. Код поиска компонента для конкретного Entity все равно никуда не денется. Плюс к тому же перед вызовом каждого метода обработки каждой системы придется писать проверку "может ли эта система обработать эту сущность?".
И ещё стоит отметить что в некоторых системах может происходить работа с удалением или добавлением Entity/Component так что сам по себе Entity пригодится при обработке.
А для тестов нужна документация системы с описанием ее работы и требования к входящему Entity.
В моем случае было важно внедрить игру в уже готовое приложение. Да, для настройки грэдла — ритуал с бубном обеспечен. А в общем для реализации небольшой игры, на уже знакомом языке, вполне нормальный вариант.
Да, для тестирования это было бы большим плюсом. Но для такого случая в движке вместо цикла придется перебирать все системы вручную передавая в метод обработки каждой системы — компоненты, в качестве аргументов ее метода обработки, с указанием типа каждого компонента. Код поиска компонента для конкретного Entity все равно никуда не денется. Плюс к тому же перед вызовом каждого метода обработки каждой системы придется писать проверку "может ли эта система обработать эту сущность?".
И ещё стоит отметить что в некоторых системах может происходить работа с удалением или добавлением Entity/Component так что сам по себе Entity пригодится при обработке.
А для тестов нужна документация системы с описанием ее работы и требования к входящему Entity.