observerclasses which provide wrappers that can be setup around models so that changes to the model can be observed and reacted to. This is combined with the view adapter engine to provide 2 way data binding across view adapter controls. All dependencies in AtomicJS are injected via constructor functions. Concerns are well separated and thanks to the View-View Adapter relationship, mixing of logic and structure is avoided. There is no need to add expressions, conditionals or other logic into the views (HTML). The result is a principled but simple approach to building web applications.