seedstack/business
56.5
Adequate · 21 September 2026
10.9k
lines of production code
Java
primary language
4
measurements over time
What this system is
This system is a business logic framework that provides domain-driven design primitives, including aggregate roots, entities, and value objects. It features a fluent DSL for mapping data transfer objects to domain aggregates and supports complex business specifications. The codebase has been significantly refactored to remove legacy audit, JPA, and web modules, focusing instead on modernized assembler and specification patterns.
How it got here
2015 — Business module refactoring
30 changes.
This period focused on modernizing the business framework by removing legacy components such as the audit module, JPA assertions, and deprecated API interfaces. The changes introduced new domain-driven design abstractions, a fluent assembler DSL for DTO mapping, and updated build configurations to support newer Java and framework versions.
2016–2017 — Business layer abstractions and migration support
6 changes.
This period focused on introducing robust abstractions for the business layer, including a specification pattern, pagination interfaces, and a fluent DSL for merging DTOs into aggregates. Additionally, a new 'migrate' module was added to support legacy components from version 3.x, ensuring backward compatibility during the transition.
Features
Added domain layer interfaces and annotations for domain-driven design
Added a new set of interfaces and annotations in the \org.seedstack.business.domain\ package to support domain-driven design patterns. This includes core domain concepts such as \AggregateRoot\, \Entity\, and \ValueObject\, along with their corresponding marker annotations (\@DomainAggregateRoot\, \@DomainEntity\, \@DomainValueObject\). The update also introduces domain event handling via \DomainEvent\, \DomainEventHandler\, and \DomainEventPublisher\ interfaces, as well as factory and repository abstractions (\Factory\, \Repository\) and identity generation mechanisms (\IdentityGenerator\, \IdentityService\).
specs/src/main/java/org/seedstack/business/domain · high confidence
Added legacy migration support for assemblers, domain models, and finders
A new 'migrate' module has been introduced to facilitate migration from version 3.x. This includes deprecated legacy interfaces and base classes for assemblers (e.g., \LegacyAssembler\, \LegacyBaseAssembler\), domain models (\LegacyAggregateRoot\, \LegacyEntity\), and repositories (\LegacyRepository\). It also provides a \Finder\ annotation and related classes (\RangeFinder\, \Result\) to support read-only queries, along with internal providers and resolvers (\LegacyDtoInfoResolver\, \MigrateModule\) to wire these legacy components into the current dependency injection and assembler DSL systems.
migrate · high confidence
Added pagination interfaces for domain objects
The codebase now includes new Java interfaces for pagination: \Page\<T\>\ and \Slice\<T\>\ in the \org.seedstack.business.pagination\ package. \Slice\<T\>\ provides a way to access a contiguous subset of items from a larger list, exposing the items, size, and iteration capabilities. \Page\<T\>\ extends \Slice\<T\>\ to add metadata about the pagination state, specifically the page index, maximum page size, and the total size of the source list. These interfaces define the contract for paginating domain objects within the business layer.
specs/src/main/java/org/seedstack/business/pagination · high confidence
Introduce base classes and DSL for DTO-to-aggregate merging
Added base classes (BaseAssembler, BaseTupleAssembler, BaseDomainEventHandler, BaseFactory) to simplify the creation of assemblers and domain event handlers. The diff also introduces a new DSL for merging DTOs into aggregates, supporting single and multiple entities, with options to load from a repository, create via a factory, or fail if the aggregate is not found. This provides a more fluent and flexible way to map data transfer objects to domain aggregates.
business-specs · high confidence
New FluentAssembler DSL for mapping aggregates to DTOs
The \FluentAssembler\ DSL has been introduced in the \specs\ module, providing a fluent API for mapping domain aggregates to Data Transfer Objects (DTOs) and merging DTOs back into aggregates. This new DSL supports assembling and merging single or multiple aggregates, including streams, iterables, and pages, as well as tuples of aggregates. The interface allows specifying assembler qualifiers and handling repository or factory-based aggregate loading, with support for various collection types (Stream, List, Set, Array, Slice, Page) in both assembly and merging operations.
specs/src/main/java/org/seedstack/business/assembler/dsl · high confidence
New SPI interfaces for DTO resolution and specification translation
Added new public SPI interfaces and annotations to the \org.seedstack.business.spi\ package to extend the business framework. This includes \DtoInfoResolver\ for instantiating aggregates and identifiers from DTOs, \SpecificationConverter\ and \SpecificationTranslator\ for converting specifications into target objects, and the \@GenericImplementation\ annotation to mark repository or assembler implementations as generic.
specs/src/main/java/org/seedstack/business/spi · high confidence
New SpecificationBuilder DSL for fluent composite specifications
A new fluent DSL for building composite specifications has been added to the business module. The \SpecificationBuilder\ interface and supporting selector interfaces (\BaseSelector\, \PropertySelector\, \AggregateSelector\, \IdentityPicker\, \OperatorPicker\, \SpecificationPicker\, \StringOptionPicker\, and \TerminalOperation\) enable users to construct complex boolean predicates in disjunctive normal form. This allows for chaining conditions using AND/OR operators, selecting specific properties or aggregate identities, and applying string-specific options like trimming and case-insensitivity.
specs/src/main/java/org/seedstack/business/specification/dsl · high confidence
New base classes and configuration for the business framework
The business module now provides abstract base classes to simplify the implementation of domain objects and repositories. Developers can extend BaseAggregateRoot, BaseEntity, BaseDomainEvent, BaseValueObject, and BaseRepository to inherit standard behaviors such as identity resolution, equality, and specification building. Additionally, a new BusinessConfig class allows configuration of pagination and data import/export settings.
core/src/main · high confidence
New business framework interfaces for data import/export and DTO mapping
The \specs\ module now includes new interfaces and annotations that define the contract for data import/export and DTO mapping. Specifically, \DataImporter\ and \DataExporter\ interfaces allow developers to implement custom handlers for importing and exporting application data, while \DataManager\ provides the API to trigger these operations. Additionally, \Assembler\ and \AssemblerRegistry\ interfaces, along with annotations like \@AggregateId\, \@DtoOf\, and \@FactoryArgument\, provide the foundation for mapping between aggregate roots and DTOs, enabling the framework to automatically generate or locate assemblers for data transfer.
specs/src/main/java/org/seedstack/business/assembler · high confidence
New specification pattern for business logic
Added a new specification pattern in the business module, introducing a \Specification\ interface with \and\, \or\, and \negate\ composition methods, alongside concrete implementations like \AndSpecification\, \OrSpecification\, \NotSpecification\, \IdentitySpecification\, \TrueSpecification\, \FalseSpecification\, and \SubstitutableSpecification\.
specs/src/main/java/org/seedstack/business/specification · high confidence
Removals
Removal of deprecated JPA infrastructure and assertion classes
The JPA module has removed several deprecated classes and files, including \BusinessJpaAssertions\, \BusinessJpaClassAssert\, \BusinessJpaErrorCodes\, \BusinessJpaObjectAssert\, \BusinessJpaReflectionAsserts\, and various base classes such as \BaseJpaAggregateRoot\, \BaseJpaEntity\, \EmbedJpaAggregateRoot\, \EmbedJpaEntity\, \SimpleJpaAggregateRoot\, \SimpleJpaEntity\, \OracleSequenceHandler\, \BaseJpaRepository\, \GenericJpaRepository\, \DefaultJpaRepository\, \AbstractSimpleJpaFinder\, and \BaseSimpleJpaFinder\. This cleanup eliminates the deprecated JPA-specific assertion and domain base classes, as well as the Oracle sequence handler and repository implementations, which were previously marked for removal.
jpa/src/main · high confidence
Removed Logback-based audit trail implementation
The Logback-specific components for audit logging have been removed from the codebase. This includes the \AuditLogbackLayout\ and \LogbackTrailWriter\ classes, along with their associated unit tests and integration test configurations. As a result, the system no longer supports writing audit trails to a Logback appender via the \LogbackTrailWriter\ implementation.
audit-logback · high confidence
Removed deprecated application and interfaces service components
The \GenericApplicationService\ interface, the \@ApplicationService\ annotation, and the \GenericInterfacesService\ interface have been removed from the \specs\ module. This cleanup eliminates unused or deprecated API components, reducing the number of packages and simplifying the business API structure.
specs/src/main/java/org/seedstack/business/api/application, specs/src/main/java/org/seedstack/business/api/interfaces · high confidence
Removed deprecated assembler classes and interfaces
The \specs/src/main/java/org/seedstack/business/api/interfaces/assembler\ package had its core implementation and interface files removed, including \AbstractBaseAssembler\, \Assembler\, \BaseAssembler\, \BaseTupleAssembler\, \Assemblers\, and related support classes like \TupleType\ and annotation markers. This cleanup eliminates the legacy assembler infrastructure in favor of a simplified, updated approach.
specs/src/main/java/org/seedstack/business/api/interfaces/assembler · high confidence
Removed deprecated event and service fixture test infrastructure
Deleted the \EventFixture\ interface and its internal implementation (\EventFixtureInternal\), along with supporting classes (\ContextLink\, \EventHandlerInterceptor\, \EventTestModule\, \HandlerProvider\, \ServiceProvider\, \EventServiceProvider\, and \EventTestErrorCodes\). Also removed related integration tests (\EventFixtureIT\, \ServiceFixturesIT\), test helper classes (\MyHandler\, \MyHandler2\), and unit tests (\EventFixtureInternalTest\, \EventTestModuleTest\, \ServiceFixtureTest\). This cleanup removes the legacy event testing utilities and their associated test coverage.
core-test · high confidence
Removed domain API interfaces and base classes
The following interfaces and classes have been removed from the domain API: AggregateRoot, DomainErrorCodes, DomainObject, Entity, Factories, Factory, GenericDomainPolicy, GenericDomainService, GenericFactory, GenericRepository, Repositories, Repository, and ValueObject. Additionally, the base implementations (BaseAggregateRoot, BaseEntity, BaseValueObject) and identity-related interfaces (IdentityHandler, IdentityService, SequenceHandler, UUIDHandler) and their associated error codes have also been removed.
specs/src/main/java/org/seedstack/business/api/domain · high confidence
Removed domain specification helper class
The DomainSpecifications class, which provided helper methods for defining domain specifications (such as aggregate roots, entities, and value objects), has been removed from the codebase.
specs/src/main/java/org/seedstack/business/api/domain/meta · high confidence
Removed obsolete business API interfaces and domain event classes
The \specs/src/main/java/org/seedstack/business/api\ directory has been cleared of several core interfaces and event classes, including \BusinessElement\, \Creatable\, \Event\, \EventHandler\, \EventService\, \Producible\, and the entire \domain.events\ package (\AggregateDeletedEvent\, \AggregatePersistedEvent\, \AggregateReadEvent\, \BaseAggregateEvent\, \DomainEvent\). These removals eliminate the legacy event handling and domain event infrastructure from the business API, simplifying the module by removing unused or deprecated components.
specs/src/main/java/org/seedstack/business/api · high confidence
Removed the legacy audit module
The entire audit module has been removed, including all API classes (such as AuditService, Trail, Host, and Initiator), internal implementation classes (including the AuditedInterceptor and AuditModule), and associated test files. This eliminates the previous mechanism for automatically auditing method execution via the @Audited annotation and writing audit events to configured TrailWriters.
audit · high confidence
Removed unused specification domain classes
Removed the \NamedSpecification\ class and the \Specification\ interface from the \org.seedstack.business.api.domain.specification\ package, along with their associated converter and translator interfaces (\SpecificationConverter\, \SpecificationTranslator\). Additionally, the \Association\ interface and its related \AssociationConverter\ and \AssociationTranslator\ interfaces were removed from the \association\ sub-package. These changes reflect the removal of unused specification components from the codebase.
specs/src/main/java/org/seedstack/business/api/domain/specification · high confidence
Removed yWorks UML Doclet resources
The yWorks UML Doclet tooling has been removed from the documentation directory. This change deletes the associated configuration and resource files, including the style definitions (seed-style.xml), taglet definitions and templates (taglet\_definitions.xml/DTD, taglet\_templates.xml/DTD), the main configuration file (ydoc.cfg), and the license file (ydoc.license). As a result, the project no longer supports generating UML diagrams or documentation using the yWorks doclet.
doc · high confidence
Behavioural changes
Removal of legacy JPA integration test fixtures
The integration test suite for the JPA module has been significantly cleaned up by removing a large number of sample domain classes, factories, and test classes (including \AutoRepositoriesIT\, \PaginationEnd2EndIT\, and various \Sample\*\ entities and repositories). This change eliminates deprecated or unused test fixtures, reducing the number of packages and simplifying the Maven structure for the JPA integration tests.
jpa/src/it/java · high confidence
Removal of seed-business web module
The seed-business web module has been removed from the application. This includes the deletion of the JavaScript module file (seed-business.js) and its corresponding Web 2.0 configuration file (seed-business.w20.json), effectively eliminating the associated AngularJS HTTP response transformation logic and module definition from the web layer.
web · high confidence
Removed legacy configuration and persistence files from integration tests
The integration test resources in core/src/it/resources/META-INF/configuration have been removed, specifically org.seedstack.business-default.properties, org.seedstack.data-security.props, and org.seedstack.seed-business.props. Additionally, the legacy persistence.xml file has been deleted. These changes reflect a cleanup of deprecated or replaced classes and configuration files, simplifying the test environment by removing obsolete setup files.
core/src/it/resources/META-INF · medium confidence
Updated changelog and CI configuration for Java 21 and Seed 3.15.0
The CHANGELOG.md file was added to document the release of version 4.5.0, which includes support for Java 21 and an update to the Seed framework version 3.15.0. Additionally, the .travis.yml file was updated to use OpenJDK 11 for the build environment and to include GPG key import for deployment, while the README.md was updated with coverage and Maven Central badges.
(repo-wide) · high confidence
Test coverage
Added integration tests for the business module; Added pagination DSL interfaces; Added test specifications for business annotations; Removal of obsolete error code resource files; Removal of obsolete test classes and sample domain models; Removed business validation assertions and annotations; Removed deprecated query interface classes; Removed domain annotation test fixtures; Removed obsolete JPA assertion and converter tests; Removed obsolete integration tests for business core.
Dependencies
Maven dependency and module structure overhaul
The project's Maven build structure has been significantly reorganized. Several modules (audit, audit-logback, bom, doc, jpa, web) have been removed entirely. The core-test module has been renamed to migrate, and its dependencies have been updated to include modelmapper and JUnitParams. The core module's dependencies have been modernized, replacing older libraries like commons-beanutils and eventcast with newer alternatives such as assertj-core, jmockit, and mockito-core. The parent POM has been upgraded to version 4.5.0-SNAPSHOT, and the build configuration now includes license checking and API compatibility checks via japicmp.
(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 58 → 57 (-1.9)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 92 → 95 (+2.7)
- Architecture 100 → 95 (-5.0)
- Maturity 43 → 43 (+0.0)
- Readiness 49 → 42 (-7.1)
- Security 95 → 95 (+0.0)
Resolved (12)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (12 lines × 2) (core/src/main/java/org/seedstack/business/internal/assembler/dsl/AnnotationDtoInfoResolver.java)
- Duplicated block (5 lines × 3) (core/src/main/java/org/seedstack/business/internal/assembler/AssemblerOverridingModule.java)
- Duplicated block (6 lines × 2) (migrate/src/main/java/org/seedstack/business/internal/migrate/MigratePlugin.java)
- Duplicated block (8 lines × 3) (core/src/main/java/org/seedstack/business/internal/assembler/AssemblerModule.java)
- Duplicated block (9 lines × 2) (core/src/main/java/org/seedstack/business/internal/data/DataManagerImpl.java)
- No exposed public API
- No installation or getting-started instructions. (README.md)
- Scanner failed to run — not a clean result
- Test reliability not included
- dormant codebase — no living knowledge left to concentrate
New (43)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (13–15 lines × 2) (core/src/main/java/org/seedstack/business/internal/data/DataManagerImpl.java)
- Duplicated block (17 lines × 2) (core/src/main/java/org/seedstack/business/internal/assembler/dsl/AnnotationDtoInfoResolver.java)
- Duplicated block (34 lines × 2) (migrate/src/main/java/org/seedstack/business/assembler/LegacyBaseAssembler.java)
- Duplicated block (5 lines × 2) (core/src/main/java/org/seedstack/business/internal/assembler/dsl/AnnotationDtoInfoResolver.java)
- Duplicated block (5 lines × 2) (core/src/main/java/org/seedstack/business/internal/assembler/dsl/AnnotationDtoInfoResolver.java)
- Duplicated block (5 lines × 2) (migrate/src/main/java/org/seedstack/business/internal/migrate/MigratePlugin.java)
- Duplicated block (5 lines × 3) (core/src/main/java/org/seedstack/business/internal/assembler/AssemblerOverridingModule.java)
- Duplicated block (6 lines × 2) (core/src/main/java/org/seedstack/business/internal/assembler/dsl/MergeSingleAggregateFromRepositoryImpl.java)
- Duplicated block (6 lines × 2) (core/src/main/java/org/seedstack/business/internal/assembler/dsl/MergeSingleAggregateFromRepositoryImpl.java)
- Duplicated block (6 lines × 2) (core/src/main/java/org/seedstack/business/internal/assembler/dsl/MergeSingleAggregateFromRepositoryImpl.java)
- Duplicated block (6 lines × 6) (core/src/main/java/org/seedstack/business/internal/assembler/dsl/MergeSingleAggregateFromRepositoryImpl.java)
- Duplicated block (6 lines × 6) (core/src/main/java/org/seedstack/business/internal/assembler/dsl/MergeSingleAggregateFromRepositoryImpl.java)
- Duplicated block (9 lines × 3) (core/src/main/java/org/seedstack/business/internal/assembler/AssemblerModule.java)
- No assertions: aggregate_with_no_identity_Management (core/src/test/java/org/seedstack/business/IdentityServiceIT.java)
- No assertions: assembleNullAggregate (core/src/test/java/org/seedstack/business/FluentAssemblerAssembleIT.java)
- No assertions: assembleNullStream (core/src/test/java/org/seedstack/business/FluentAssemblerAssembleIT.java)
- No assertions: create_aggregate_using_a_primitive_parameter_conflicted_constructor (core/src/test/java/org/seedstack/business/internal/domain/DefaultFactoryTest.java)
- …and 23 more
Architecture
- Containers 0 added · 0 removed · contexts 2 added · 1 removed · edges 1 added · 0 removed
Added bounded contexts (2)
- business-core
- business-migrate
Removed bounded contexts (1)
- business-specs
Added dependency edges (1)
- business-migrate → business-core
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
seedstack/business 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 11ed627f5ac0abb47771bf4c8b2a74182baee7c9 — 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.