Architecture Overview
This project is developed to be easy to maintain and extend overtime. This has been done by following some key principles of Domain Driven Design (DDD). The project is not fully adhering to this design principle but is improving over time. The core structure types are explained in detail within the structure part of this section.
What is Domain Driven Design (DDD)
This is a method of designing software based around the business domain. The idea is to develop a ubiquities language between non technical and technical users to improve understandability between the groups and aligning focus. By developing in this way it removes complexity and allows for easier iteration of the code as couping of systems should be limited to only the requirements of the business logic and not to the codebase resulting in less requirements to rewrite and redesign systems.
Ubiquitous Language
Naming of objects within the system will have the same names for their concepts as they do within their implementations. This means most concepts will have a service and data object which acts as the means to interact with the concept.
Business Domain
The business domain in this tool is Behavioural AI. The system has been broken down into bounded contexts (a logical boundary within the system and controls a certain part of the business domain). Code within the bounded context should be the only one directly interacting with it's own context with services providing data to the ones outside preventing complexity by limiting paths through the system.