IoT Assistant design
This application was developed as part of this trainning course at EscuelaIt. The development process used was RUP. The artifacts produced by RUP activities (typically UML diagrams) were used to document the architecture using Philip Krutchen 4+1 View Model.
4+1 Views
To facilitate navigation between the different 4+1 views StarUML was used. The StarUML project file is located here.
Following are just some of the most important project UML diagrams:
Domain model
Following is a UML class diagram that communicates the problem domain entities and their relationships, usefull to stablish a ubiquitous vocabulary and be used as an input during design activities.
System architecture
"All architecture is design but not all design is architecture” (Grady Booch). To design is to give shape, and even when we write a line of codewe shape it by selecting expressions operands and operators, naming identifiers... However, not all design qualifies as architecture. Architecture typically refers to high-level design, focusing on essential elements while ignoring the irrelevant, and involves significant design decisions where "significant" is measured by the cost of change.
For a hardware software system, we can reason about about a system architecture with software components that interact with each other and that are deployed in physical machines. Below is a UML deployment diagram describing a typical deployment with IoT Assistant.
The deployment diagram above includes several software components, each of which has its own software architecture, which will be detailed later..
Database
IoT Assistant use a H2 on file database located in the $HOME directory. If the database does not exist when IoT Assistant is launched, it will be created automatically. To use a different database, create an application.properties file in the same folder where the .jar is run, overriding the following Spring Boot (2.3.0.RELEASE) properties:
# Database URL
spring.datasource.url=
# Database credentials
spring.datasource.username=
spring.datasource.password=