Design
Domain-Driven Design
We are including information about the design of the application for those who might be interested in contributing.
In 2003, Eric Evans authored a groundbreaking book about tackling complexity in the heart of software. He wrote:
"Domain-driven design puts a model to work to solve problems for an application. Through knowledge crunching, a team distills a torrent of chaotic information into a practical model. A MODEL-DRIVEN DESIGN intimately connects the model and the implementation. The UBIQUITOUS LANGUAGE is the channel for all that information to flow between developers, domain experts, and the software. The result is software that provides rich functionality based on a fundamental understanding of the core domain."
We used the CDASHIG V2.2 specification as the UBIQUITOUS LANGUAGE" for our App.
We believe that the code is the truth. So we used class diagrams generated by Visual Studio to visualize objects. We include those class diagrams in the solution folder to refresh ourselves on what the objects do as we developed our App. We found the ability to change the code and view an updated class diagram with a click of a button very valuable.
​
We created a folder structure in the solution that reflected the terminology in the CDASHIG document. For example, here is the folder structure for the Web project:
​
​
​
​
​
​
​
​
So all the code related to presenting the Import, View, and Delete feature for CDASHIG Example CRFs will be found in the Pages->CdashIgExampleCrfs folder. There is a similar folder for CDASHIG Domains.
We also followed Evans's advice to name our class using terms from the UBIQUITOUS LANGUAGE. This enabled us to use the Visual Studio search feature to make the following query:
Show me all the classes associated with the CDASHIG Example CRFs feature. Here is the result (abbreviated).
This practice ties all the classes together, that are related to a feature in the Domain using the UBIQUITOUS LANGUAGE.
Our next step was to apply the principles of Clean Architecture to the implementation..