points

ES Design goals explained

This page revive and explain more about points of design goals and implementations for an ES and its usefulness (means features) to corporate with other Java and game software techs and layers.

Theoretically a Java ES done right should be:

  1. Pure data : very debatable

    1. Mutable : as bean with setter and getter

    2. Immutable : as bean with getter, should be replace if changed.

  2. Multi-threading, concurrency enable : very debatable

    1. As my experience, pure data or not is not clear contract to multi-threading success. Consider other things happen outside of ES scope, so it not an solid warranty that those component will not be touched by any other thread.

    2. Also if there is a contract that no other thread touching those data, in Java style via synchronization or other paradigm like actor… multi-threading also consider success but just more complicated!

  3. Communication: very debatable

    1. Event messaging enable

    2. No event or messaging : update beat, no need of inter-com or events. How can we do network messaging?

  4. Is database (and other kind of persistent) friendly

    1. Save to XML (file, serialized)?

    2. Send over network?

    3. Change sets are resembling Database concept, what about transactions?

  5. Is enterprise friendly (expandable/ extensible/ modulizable)

    1. Spring, as lazy loaded, injected?

  6. Script possibilities

    1. Can be script, non trivial work in pure data!

    2. Can be use with other JVM language than java like groovy, or scala, jython?

  7. Restrictions and limitation

    1. No dynamic Java object methods in Component ? What about Entities and Systems ( Processors)

    2. An overall way to manage and config Systems, freely chose? How to hook to its routine?

  8. Dependencies

    1. The separation of components are clear, as no dependencies at all. Hard cored, scripted or injected will break the overall contract!

    2. The separation of Entities. What about dependencies of entities? Ex: parent/ child relationship in JME spatial. How the framework handle that?

    3. The separation of Systems. Ex: any contract about that?