link-intersystems/clean-architecture-example
58.9
Adequate · 21 September 2026
6.6k
lines of production code
Java
primary language
4
measurements over time
What this system is
This is a car rental management application that handles the full lifecycle of vehicle rentals, including searching for available cars, processing bookings, and managing pickup and return operations. The system is structured around distinct domains for booking and management, supported by shared value objects for money, time, and vehicle identification. It features both synchronous and asynchronous event dispatching for domain notifications and offers flexible persistence via JDBC or JPA backends.
Features
Add JDBC and JPA persistence implementations for car rental components
The application now supports two persistence backends for managing car rentals: a JDBC-based implementation and a JPA-based implementation. The JDBC module provides database configuration, transaction management, and repository classes that interact directly with an H2 database using raw SQL templates. The JPA module offers an alternative implementation using Java Persistence API, managing entity managers and transactions via a thread-local proxy pattern. Both modules implement the same component interfaces, allowing the application to be configured with either persistence strategy through the service loader mechanism.
(repo-wide) · high confidence
Add JDBC transaction support with transaction-aware data source
The libs/tx area now includes a new JDBC transaction module (tx-jdbc) that provides a TransactionAwareDataSource to automatically bind JDBC connections to the current transaction context. This allows applications to use standard JDBC data sources while ensuring that all connections retrieved during an active transaction are reused, simplifying transactional JDBC usage.
libs/tx · medium confidence
Added Amount class for monetary values
A new Amount class has been introduced in the shared entities module to handle monetary values. This class wraps a BigDecimal, enforces non-negative values, applies a two-decimal-place scale with HALF\_UP rounding, and provides multiplication and equality semantics.
_shared/entities/src/main/java/com/link\intersystems/carrental/money · high confidence
Added CarBookedEvent domain event
A new CarBookedEvent class has been introduced to represent the car booking completion, carrying the booking number, vehicle VIN, and customer name details. This change includes the corresponding unit tests to verify the event's properties and string representation.
car-booking/events · high confidence
Added Period and PeriodBuilder classes for managing time ranges
The codebase now includes a new Period class that represents a time range defined by a begin and end LocalDateTime, including methods to check for overlaps, calculate days, and determine if the period is in the past. A corresponding PeriodBuilder is also added to facilitate the creation of Period instances using a builder pattern with date and time string inputs.
_shared/entities/src/main/java/com/link\intersystems/carrental/time · high confidence
Added VIN entity class
A new VIN (Vehicle Identification Number) entity class has been introduced in the shared entities module. This class encapsulates the 17-character vehicle identification number, providing validation upon construction and standard object equality semantics.
_shared/entities/src/main/java/com/link\intersystems/carrental · low confidence
Added car booking and car offer use cases
Introduced the core use cases for the car rental application: CarBookingInteractor and CarOfferInteractor. The booking flow validates car availability, persists the reservation, and publishes a CarBookedEvent to synchronize with the management component. The offer flow filters available cars by type and period, then returns detailed rental offers including pricing and vehicle specifications.
car-booking/use-cases/src/main · high confidence
Added car booking list view and associated UI components
The car rental management interface now includes a new UI for listing car bookings. This change introduces a dedicated view (ListCarBookingView) that displays a table of bookings, showing the booking number, vehicle VIN, and customer name. The implementation includes a controller (ListCarBookingController) to fetch booking data, a presenter (CarBookingPresenter) to map response models to UI models, and configuration wiring (ListCarBookingUIConfig) that connects the list view to the pickup car controller, enabling selection-based interactions between the two features.
_car-management/details/ui/src/main/java/com/link\intersystems/carrental/management/booking/list · high confidence
Added car offer search and booking UI components
Introduced a new car offer search and booking interface, including the CarOfferView and its constituent parts: CarOfferSearchArgumentsView for inputting search criteria, CarOfferSearchResultView for displaying results, and CarOfferBookingView for the booking action. The CarOfferController handles the search logic, while the CarBookingController manages the booking process, linking the selection of a car offer to the booking action. The CarOfferModel and CarOfferPresenter facilitate data transformation between the UI and the business logic.
car-booking/details/ui · high confidence
Added car pickup and return workflows
Introduced the UI components for managing car rentals, including controllers, forms, and models for picking up and returning cars. Users can now select a booking to initiate a car pickup, entering details such as odometer reading, fuel level, and driver information. Similarly, users can return a car by providing the return date, odometer reading, and fuel level. These changes enable the full rental lifecycle within the car management module.
_car-management/details/ui/src/main/java/com/link\intersystems/carrental/management/rental · high confidence
Added support for asynchronous domain event dispatching
The shared events module now supports asynchronous event dispatching via a new \AsyncEventDispatchStrategy\ that routes event notifications through a configurable \Executor\ and optional delay, while retaining the existing synchronous dispatch mechanism. This allows the system to handle domain events in a non-blocking manner, which can improve responsiveness for time-consuming event handlers.
shared/events · high confidence
Introduce car booking and customer domain models
Added new domain classes for the car rental management system: CarBooking, Customer, and RentalState. The CarBooking entity now tracks the booking number, vehicle VIN, rental state, and associated customer. The Customer class stores first and last names, and the RentalState enum defines the lifecycle states PICKED\_UP and RETURNED. These changes support the existing booking functionality by providing the necessary data structures for managing car rentals.
_car-management/entities/src/main/java/com/link\intersystems/carrental/management/booking · high confidence
Introduce car rental domain entities and booking models
Added new domain classes to the car-booking entities module, including Car, CarId, Specs, and related value objects (Doors, Seats, Consumption, FuelType, VehicleType). Also introduced the CarBooking aggregate, Customer and CustomerId models, and the RentalOffer/RentalCar classes that define the rental rate and period for a booking.
car-booking/entities/src/main · high confidence
Introduced domain models for car rental management
Added new domain classes to the car management module, including CarRental, CarState, Driver, FuelLevel, and Odometer. These classes define the core entities and value objects used to track rental periods, driver information, and vehicle condition metrics such as fuel and mileage.
_car-management/entities/src/main/java/com/link\intersystems/carrental/management/rental · high confidence
Introduced programmatic UI configuration for the main application frame
The application now uses a dedicated configuration class, CarRentalMainUIConfig, to programmatically wire the main frame with the car offer and car management views. This change establishes the initial layout and tabbed interface for the Car Rental App, setting the main window size to XGA (1024x768) and centering it on the screen.
car-rental-main/details/car-rental-main-ui · high confidence
Introduces BookingNumber value object for car rental bookings
A new BookingNumber class has been added to the shared entities module. This value object encapsulates an integer booking identifier, enforcing a minimum value of 1 and providing standard equality and hashing implementations. This change supports the new pickup car use case by providing a dedicated type for booking numbers within the car rental domain.
_shared/entities/src/main/java/com/link\intersystems/carrental/booking · medium confidence
New car management dashboard with integrated booking and pickup views
The car management UI now features a main dashboard (CarManagementView) that consolidates access to car bookings and pickup operations. This is achieved by introducing a new UI configuration (CarManagementUIConfig) that wires together the ListCarBookingView and ListPickupCarView, while a new BookingNumberModel supports the booking interface. Users will see a tabbed interface for managing car bookings and pickup cars.
_car-management/details/ui/src/main/java/com/link\intersystems/carrental/management · high confidence
Behavioural changes
4 commits (0 fixes) modifying src/site
A change to existing behaviour in src/site — 4 commits, 10 files.
src/site · medium confidence · unverified
Added empty JVM configuration file
An empty .mvn/jvm.config file was added to the project. This file is typically used to pass JVM arguments to the Maven wrapper, but in this case, it contains no configuration.
.mvn · high confidence
Introduce configurable event dispatching and application entry point
The application now supports both synchronous and asynchronous domain event dispatching, allowing users to configure the \eb\ property to switch between \sync\ and \async\ strategies. The \CarRentalApp\ class serves as the new entry point, initializing the UI and event bus based on command-line arguments. This change replaces the previous IoC-based initialization with a more explicit configuration model for the main frame and event handling.
app/car-rental-app · medium confidence
Test coverage
Added run configurations for tests and application; Added test fixtures and unit tests for car rental entities; Added tests for car booking and car offer use cases; Added tests for car booking and rental UI components; Added unit tests for car rental domain entities; Added unit tests for shared entities.
Dependencies
Restructured Maven build into domain-oriented modules
The project's Maven structure has been refactored to organize the codebase into distinct modules for car booking and car management. Each domain now includes separate modules for entities, use cases, and details (repositories for JDBC and JPA, UI, and event subscribers). Additionally, shared infrastructure libraries for AOP, JDBC, JPA, time, and transactions have been extracted into a dedicated \libs\ module, and the application component is now configured via a parent POM that aggregates these new sub-modules.
(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
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 50 → 59 (+8.4)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 98 → 98 (-0.2)
- Architecture 97 → 100 (+2.9)
- Maturity 62 → 62 (+0.0)
- Readiness 44 → 47 (+3.8)
- Security 36 → 55 (+19.4)
- Domain Modelling 100 → 100 (+0.0)
Resolved (26)
- Change coupling: CarBookingController.java ↔ CarOfferController.java (car-booking/details/ui/src/main/java/com/link_intersystems/carrental/booking/ui/CarBookingController.java)
- Change coupling: CarOfferController.java ↔ CarOfferSearchArgumentsView.java (car-booking/details/ui/src/main/java/com/link_intersystems/carrental/offer/ui/CarOfferController.java)
- Change coupling: CarOfferController.java ↔ CarOfferView.java (car-booking/details/ui/src/main/java/com/link_intersystems/carrental/offer/ui/CarOfferController.java)
- Change coupling: CarOfferModel.java ↔ CarSearchModel.java (car-booking/details/ui/src/main/java/com/link_intersystems/carrental/offer/ui/CarOfferModel.java)
- Change coupling: CarOfferPresenter.java ↔ CarOfferView.java (car-booking/details/ui/src/main/java/com/link_intersystems/carrental/offer/ui/CarOfferPresenter.java)
- Change coupling: CarOfferRepository.java ↔ CarOfferRequestModel.java (car-booking/use-cases/src/main/java/com/link_intersystems/carrental/booking/CarOfferRepository.java)
- Change coupling: CarOfferRequestModel.java ↔ CarOfferResponseModel.java (car-booking/use-cases/src/main/java/com/link_intersystems/carrental/booking/CarOfferRequestModel.java)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (5 lines × 2) (libs/ui/src/main/java/com/link_intersystems/carrental/swing/SpringUtilities.java)
- Duplicated block (6 lines × 2) (car-booking/details/repository-jdbc/src/main/java/com/link_intersystems/carrental/booking/JdbcCarOfferRepository.java)
- Duplicated block (9 lines × 2) (app/app-components/car-rental-app-components-jdbc/src/main/java/com/link_intersystems/carrental/components/jdbc/DataSourceConfig.java)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- …and 6 more
New (49)
- Coverage not measured — no coverage collector is wired up
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Duplicated block (10 lines × 2) (app/app-components/car-rental-app-components-jdbc/src/main/java/com/link_intersystems/carrental/components/jdbc/DataSourceConfig.java)
- Duplicated block (32 lines × 3) (car-management/details/ui/src/main/java/com/link_intersystems/carrental/management/rental/pickup/ui/PickupCarModel.java)
- Duplicated block (5 lines × 2) (car-booking/details/repository-jdbc/src/main/java/com/link_intersystems/carrental/booking/JdbcCarOfferRepository.java)
- Duplicated block (5 lines × 2) (car-management/details/repository-jdbc/src/main/java/com/link_intersystems/carrental/management/rental/CarRentalFactory.java)
- Duplicated block (5 lines × 2) (car-management/use-cases/src/main/java/com/link_intersystems/carrental/management/rental/PickupCarInteractor.java)
- Duplicated block (5 lines × 2) (libs/ui/src/main/java/com/link_intersystems/carrental/swing/SpringUtilities.java)
- Duplicated block (5 lines × 6) (app/app-components/car-rental-app-components-spi/src/main/java/com/link_intersystems/carrental/booking/CarBookingComponent.java)
- Duplicated block (6 lines × 2) (car-management/details/repository-jdbc/src/main/java/com/link_intersystems/carrental/management/rental/CarRentalFactory.java)
- Duplicated block (6 lines × 2) (car-management/entities/src/main/java/com/link_intersystems/carrental/management/rental/Odometer.java)
- Duplicated block (7 lines × 2) (app/app-components/car-rental-app-components-jdbc/src/main/java/com/link_intersystems/carrental/components/jdbc/DataSourceConfig.java)
- Duplicated block (7 lines × 2) (app/app-components/car-rental-app-components-jdbc/src/main/java/com/link_intersystems/carrental/components/jdbc/DataSourceConfig.java)
- Duplicated block (7 lines × 2) (car-management/details/repository-jpa/src/main/java/com/link_intersystems/carrental/management/booking/JpaUpdateCarBookingRentalRepository.java)
- Duplicated block (7 lines × 2) (car-management/details/repository-jpa/src/main/java/com/link_intersystems/carrental/management/rental/JpaGetPickupCarRepository.java)
- Duplicated block (8 lines × 2) (app/app-components/car-rental-app-components-jdbc/src/main/java/com/link_intersystems/carrental/components/jdbc/DataSourceConfig.java)
- Duplicated block (9 lines × 2) (app/app-components/car-rental-app-components-jdbc/src/main/java/com/link_intersystems/carrental/components/jdbc/DataSourceConfig.java)
- High: security finding (details withheld)
- High: security finding (details withheld)
- …and 29 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
link-intersystems/clean-architecture-example 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 6fa4f28ba7c05f008c23372c4dbd4018aff55115 — 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-fa71c66cabd8.