Notes on port and interface use and implementation. Table of Contents 1) notes for the component writers 2) notes for the framework writers. --------------------------- --------------------------- 1) notes for the component writers Broadly the interfaces that components and framework exchange can be divided into: - those the components use that the framework implements. - those the components provide that the framework uses. Note that not all of these are necessarily ports. Some are merely interfaces that flow through ports. The interfaces the framework uses can be further subdivided into: - those (ports) the framework automagically recognizes and calls on. - those interfaces that have to be explicitly registered with some service. It is very helpful to know how the ports and interfaces fall in the above categories, from the viewpoint of the science component developer. Likely framework-implemented service ports and interfaces: BasicParameterPort.hh BuilderService.hh ComponentClassDescription.hh ConnectionEvent.hh ConnectionEventService.hh JPrintfPort.hh MPIBorrow.hh MPIService.hh ParameterPort.hh ParameterPortFactory.hh ServiceRegistry.hh Likely component-implemented ports and interfaces: BasicParameterPort.hh ComponentFactory.hh ComponentRepository.hh ConnectionEventListener.hh GoPort.hh ParameterGetListener.hh ParameterSetListener.hh ServiceProvider.hh --------------------------- 2) notes for the framework writers. The main impact on the framework, particularly on a framework supporting multiple bindings, is that when a neo-based component exports an interface or port that is framework-used, we have to wrap it appropriately. We don't want the core code to be infested with special cases, so we use some sort of adapter-generating helper that can expand as the special cases do, leaving the core logic clean and tested. In the list above, the component writer might reasonably implement (independent of possible framework implementations) Ports: BasicParameterPort.hh ComponentFactory.hh ComponentRepository.hh GoPort.hh ServiceProvider.hh Other interfaces that go as raw pointers ConnectionEventListener.hh ParameterGetListener.hh ParameterSetListener.hh Basically all of these will need adapters, possibly 2-way to cause correct behavior between any two bindings. As, particularly, the port list continues to grow, we can't sew a ton of special cases like goport into the Services implementation.