Skip to content
CAI
Software that uses CAICheck a score

appie2go/DomainObjects

54.5

Adequate · 21 September 2026

618

lines of production code

C#

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a .NET library for implementing Domain-Driven Design patterns, specifically providing foundational domain objects such as Aggregates, Entities, and Value Types. It supports custom identifier types and includes serialization capabilities for JSON. The codebase is fully automated via CI/CD pipelines and includes comprehensive unit tests to verify entity equality, value comparisons, and serialization behavior.

Features

Added Aggregate base class for domain modeling

A new \Aggregate\ base class has been introduced to support domain-driven design patterns. It provides a consistency boundary for domain objects, with two overloads: a generic version that accepts a custom key type (\TKeyType\) and a simpler version that uses the standard \Id\<T\>\ identifier. This allows entities to be properly typed as aggregates within the domain model.

DomainDrivenDesign.DomainObjects · high confidence

Added CI/CD pipeline and test project for DomainObjects

Introduced an Azure Pipelines configuration (azure-pipelines.yml) to automate building, testing, and publishing the DomainObjects package to NuGet using .NET 5. Additionally, a new test project (DomainObjects.Test) was added to the solution to support automated testing.

(repo-wide) · high confidence

Behavioural changes

Refactored domain object model with improved ID and value type support

The domain object model has been refactored to support custom ID types and improved value type handling. The \Entity\ class now supports generic key types via \Entity\<TEntity, TKeyType\>\, allowing for non-GUID identifiers. The \Id\ class was restructured into an abstract base \Id\ with a generic \Id\<T, TType\>\ implementation, enabling extensibility for different identifier strategies. Value types (\Value\<T\>\, \BoolValue\, \ComparableValue\) were reorganized under the \DomainDrivenDesign.DomainObjects\ namespace, with \ComparableValue\ replacing \NumericValue\ to support sorting and comparison operations. Serialization support was added to value types, and null reference exceptions in comparison logic were fixed.

DomainObjects · high confidence

Test coverage

Added tests for BooleanValue conversion and comparison; Added tests for aggregate, entity, and value serialization; Added tests for numeric value comparison and sorting; Added unit tests for Entity equality and identity; Added unit tests for Value type equality, inequality, and string representation; Added unit tests for the Id value object.

Dependencies

Updated .NET target frameworks and test dependencies

The DomainObjects library now targets multiple .NET versions, including netstandard2.0, netstandard2.1, and various netcoreapp versions up to 5.0, while the DomainObjects.Test project has been updated to target netcoreapp5.0. Additionally, test dependencies such as AutoFixture, FluentAssertions, and MSTest have been added or updated, and Newtonsoft.Json has been upgraded to version 13.0.1 in the test project.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 52 → 54 (+2.8)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 98 → 98 (+0.0)
  • Maturity 45 → 45 (+0.0)
  • Readiness 47 → 47 (+0.0)
  • Security 50 → 71 (+20.8)
  • Performance 70 → 70 (+0.0)

Resolved (21)

  • Bounded contexts not declared
  • Coverage not measured — analyzer environment
  • High CVE: Microsoft.NETCore.App 1.0.5
  • High CVE: Microsoft.NETCore.App 1.0.5
  • High CVE: Microsoft.NETCore.App 1.1.2
  • High CVE: Microsoft.NETCore.App 1.1.2
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.2.0
  • High CVE: Microsoft.NETCore.App 2.2.0
  • Medium CVE: Microsoft.NETCore.App 2.1.0
  • Medium CVE: Microsoft.NETCore.App 2.1.0
  • Medium CVE: Microsoft.NETCore.App 2.1.0
  • Medium CVE: Microsoft.NETCore.App 2.1.0
  • Medium CVE: Microsoft.NETCore.App 2.2.0
  • No exposed public API
  • Test runner surfaced no tests
  • dormant codebase — no living knowledge left to concentrate
  • …and 1 more

New (10)

  • Documentation: no architecture or design documentation (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • High CVE: Microsoft.NETCore.App 1.0.5
  • High CVE: Microsoft.NETCore.App 1.1.2
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.2.0
  • In the InequalityTest class, the test method names inconsistently use ShouldBeUnequal and ShouldNotEqual to describe the same assertion behavior (verifying that two values are not equal). While Unequal and Not Equal are semantically similar, the codebase should standardize on one phrasing for consistency.
  • No dependency advisory monitoring
  • The test method WhenDifferentId_ShouldCompareShouldNotBeTrue() in InequalityTest has a confusing and verbose name that mixes the condition (WhenDifferentId) with the expected outcome (ShouldNotBeTrue) in a non-standard way. In contrast, WhenSameId_ShouldCompare() in EqualityTests is concise. The Inequality test name is structurally inconsistent with the clear When<Condition>_Should<Outcome> pattern used elsewhere (e.g., WhenTrue_ShouldCastToTrue).

Architecture

  • Unchanged — 0 containers · 1 contexts · 0 edges

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

appie2go/DomainObjects was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit deb107fb915a62d3704176866d40f782f8332e7f — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.