A simple thought to give when designing and coding Axonator new versions is to think how the future developers will work on it. How will they understand the design and code and how easily they should be able to find the location of code changes required to fix an issue or enhance the product.
Always prefer inheritance over modification – means new developers don’t need to modify the code but only add/inherit new classes for new features.
- This will help us focus more on architecture in the future and support engineers will work fast and without frustration and losing time!
- Even support engineers may find the doing work more rewarding if they have to extend the system instead of modify for new features.
- Modification requires a lot of testing and retesting.
- Inheritance will limit the new issues to new class.
- Even in enlighten think about pluggable architecture for chart types. A new person or our High-code clients or community should be able to contribute to the platform by extending enlighten with new charts easily (inherit from x class and override a few methods etc)
- For example: developers can drop a new class or component in one folder and it will appear as a new chart type in Enlighten
- For this to be effective the design should be like that from beginning
- For example: everything related to one chart type must be in one folder only including it’s icon file.
Think in diagrams, write in code
Think in diagrams
Means start directly drawing diagrams, Object model must be a diagram first
SQL query generator or builder will be a class in the diagram
And keep modifying until finalized
And keep updated
Whatever concepts you are thinking must be in a diagram from the first moment
embedded UI objects
UI -> object model -> JSON
Object model embedded in UI
The query builder UI there has group rows and group columns and these must be handled in class models in typescript
JSON is only for sending to server
The query will be built using an object model in typescript tied to UI
This applies to all UI elements
Whatever UI we build will have object model attached to UI
And finally serialize into JSON for transport
UI -> object model -> JSON serialization -> Rest API transport -> deserialize JSON-> C# object model -> SQL query -> execute