Skip to content

architecture overview

samatstarion edited this page Aug 28, 2024 · 6 revisions

CDP4-COMET Web Services Design

SOLID

The CDP4-COMET Web Services have been designed to provide the performance that is required by users. At the same time the design of the CDP4-COMET Web Services is based on SOLID principles.

Similar to the CDP4-COMET-SDK and CDP4-COMET-IME, the CDP4-COMET development team makes use of code-generation for the development of the CDP4-COMET WebServices. This speeds up the development of the application and makes sure the applicaiton is compliant with ECSS-E-TM-10-25 Annex A and the CDP4-COMET Data Model.

The classess that are code generated are generated as partial classess, which allows hand-coding algorithms in other code files that do not lend themselves to code-generation.

Dependeny injection is at the heart of the application, where we rely on Autofac to perform (primarily) property injection.

COMET Web Services Solution

The CDP4-COMET Web Services soltuion contains the following projects:

  • CometOrm
  • CDP4Authentication
  • CDP4DatabaseAuthentication
  • CometServer
  • VersionFileCreator

CometOrm

The CometOrm project contains the classess and business logic that perform all CRUD operations on the CDP4-COMET Database.

For each class in the CDP4-COMET Data Model a Dao class is generated. The Dao classess follow the inheritance of the classess in the CDP4-COMET Data Model. The generated Dao classes can be found in the AutoGenDao folder.

Each generated Dao class is responsible for performing the Read, Write, Update and Delete operation, where the Read operations are only available for concrete classes and not for abstract classes. The Doa classess map to tables in the CDP4-COMET Database and basicaly map CDP4-COMET DTO's to tables and link-tables in the database.

The database design is such that for each class in the CDP4-COMET Data Model a table exists that is responsible for the persistence of the value and reference properties. This includes tables for abstract classes. Hence, for each write, update and delete operation the write, update and delete operation of the base class is invoked as well, concluding at the ThingDao class.

The ThingDao class, which represents the Thing class from the COMET Data Model, itself derives from the BaseDao class. The BaseDao class provides virtual methods that allow to inject code that is exexuted before or after any Update, Delete and Write operation. These methods can be implemented (override) with hand-written code in the Dao\Supplemental folder by creating a partial class file that corresponds to the class that needs an implementation of any of the before\after methods.

The structure of the ORM Dao classess is further explained here.

The CometOrm also provides the capability to migrate data between different versions of the CDP4-COMET. The migration engine documenation can be found here.

CometServer

The CometServer project contains the application code and business logic to implement ECSS-E-TM-10-25 Annex C and the CDP4-COMET extensions. The CometServer is developed using ASP.NET Core 8.0 and a lightweight routing library called Carter.

CometAuthentication

The CometAuthentication project provides the infrastructure for authentication plugins such as the database authenticator and the LDAP authenticator plugin.

CometDatabaseAuthentication

The CometDatabaseAuthentication project provides the database authenticator plugin that supports authentication of users agains the CDP4-COMET database.

VersionFileCreator

The VersionFileCreator is a commandline application that generates the VERSION file that contains the name and version number of the CDP4-COMET libraries and components.