I’ve been racking my brain trying to best work out how to organise the code for awstools. My goals are to make it possible to have view models composable, have state centralised but also localised, and keep controllers from having too much responsibility. I started another tool, which browses SSM parameters, to try and work this all out.

I think I’ve settled on the following architecture:

  • Providers and Services will remain stateless
  • State will be managed by controllers
  • Operations in controllers are only available through tea.Cmd implementations.
  • Updates from controllers will only be available through tea.Msg implementations.
  • View models (i.e. tea.Model) will only know enough state to be able to render themselves.
  • There will be one master model which will coordinate the communication between controllers and view models. This model will react to messages from the controllers and update the views. It will also react to messages from the views and launch operations on the controllers.

We’ll see how this goes and whether it will scale as additional features are added.