We should consider the inherent requirements for all components.
All of the components, public functions, and data should be accessible via a simple interface.
We should be able to add/delete/modify our component's actions simply.
Any modifications should have little effect on the overall software design.
The component stores its own state locally and persistently.
The component should initialize itself.
Errors are handled by the component.
Inputs and Outputs should verify themselves.
Message sending is the means of controlling your component. The calling component will send a message to the called component telling it what to do.
There are various methods you could employ to send messages ...