This is a grouping of related issues. Feel free to vote (👍) for this issue to indicate that this is an area that you think we should spend time on, but consider also voting for individual issues for things you consider especially important.
ECS is a data-oriented architectural pattern mostly used in games. ECS follows the principle of composition over inheritance, meaning that every entity is defined not by a type or discriminator value, but by the set of contained objects called components. For example, a weapon is an entity that contains mass, velocity, position, durability and material components. The behavior of an entity can be changed at runtime by adding, removing or mutating components. This eliminates the ambiguity problems of deep and wide inheritance hierarchies that are difficult to understand, maintain, and extend.
[ ] Named sets of components can be represented by STETs with "inheritance" (#9630)
[ ] The discriminator condition would be the presence of specific owned entities (components) (#10140)
[ ] Relationships between different entity types would need to store the FK on the components, while the navigations could be on the entity or a component
[ ] Mutating the components requires dynamic retyping of the entity while preserving state of the unchanged components
[ ] A common optimization is to keep the components of the same type grouped in memory. This requires custom entity factory support (#11253 / #10789)
This is a grouping of related issues. Feel free to vote (👍) for this issue to indicate that this is an area that you think we should spend time on, but consider also voting for individual issues for things you consider especially important.
ECS is a data-oriented architectural pattern mostly used in games. ECS follows the principle of composition over inheritance, meaning that every entity is defined not by a type or discriminator value, but by the set of contained objects called components. For example, a weapon is an entity that contains mass, velocity, position, durability and material components. The behavior of an entity can be changed at runtime by adding, removing or mutating components. This eliminates the ambiguity problems of deep and wide inheritance hierarchies that are difficult to understand, maintain, and extend.