Change construction from static method
Static create() methods for our components, like all static methods, present testing issues. The idea was to have an enforced consistent interface for creation, implemented within each class so the constructor could be private/protected, but that's not worth it. I was thinking of an abstract factory, but maybe I'm overthinking/prematurely optimizing here. Most immediately, to get the actual architecture/functionality fleshed out, all we need is the convention that component constructor signatures are
public __construct(array $configuration). Our basic application/task implementations can take class names from configuration and construct them directly. Ultimately, I expect Soong to most often be used in a platform/framework context with service containers/plugin managers/etc. to invoke our classes - we can wait until we start doing these integrations to see what factory interfaces make sense.
So, going back to public constructors...