Из-за Unity ECS я в последнее время много читал о ECS.
У архитектуры ECS есть много очевидных преимуществ:
ECS ориентирован на данные: Данные, как правило, хранятся линейно, что является наиболее оптимальным способом доступа к ним системы. В приличных реализациях ECS данные хранятся и обрабатываются последовательно, с небольшими перерывами или без прерываний для какой-либо системы, обрабатывающей свой набор компонентов.
ECS очень разделен: Естественно отделяет данные от поведения, обеспечивает «композицию по наследованию» (google it) и т. д.
ECS очень удобен для параллельной обработки и многопоточности: Из-за структуры вещей многие сущности икомпоненты могут избегать конфликтов и обрабатываться параллельно с другими системами.
Однако недостатки ECS (по сравнению с OOP или Entity-Component [без систем], как это часто бывает в игровых движках, включая Unityдо недавнего времени) редко, если вообще когда-либо говорили. Они существуют? И если они делают, что они?