Architecture / Internal Structure
Clean Architecture + Hexagonal Ports & Adapters
Per-service internal structure: The Dependency Rule in action
BYLD Wealth v2.0
March 2026
depends on
ALL DEPENDENCIES POINT INWARD
Frameworks & Drivers
Interface Adapters
Application / Use Cases
Domain
Aggregates
Value Objects
Domain Events
Ports (Interfaces)
ChatPort
QueryPort
EventPort
RepoPort
GatewayPort
AIPort
EventPub
Driving Adapters (Primary)
🌐
REST Controller
Spring @RestController — receives HTTP requests, validates DTOs, calls use cases
implements: WebPort
🔌
WebSocket Handler
Real-time MIA conversation stream, market data push, portfolio updates
implements: StreamPort
📨
Kafka Listener
@KafkaListener — consumes domain events from other bounded contexts
implements: EventPort
⏰
Scheduler
@Scheduled — SIP triggers, NAV refresh, compliance checks, report generation
implements: CronPort
Driven Adapters (Secondary)
💾
JPA Repository
Spring Data JPA — PostgreSQL persistence, implements domain Repository interfaces
implements: *Repository
🧠
Claude Gateway
SSE streaming client, tool_use orchestration, prompt management, token tracking
implements: AIGateway
🔍
Pinecone Client
Vector similarity search for RAG — fund factsheets, regulatory docs, user history
implements: VectorStore
🏦
MFU/Finvu Client
Anti-Corruption Layer translating ISO-20022/ReBIT to domain commands
implements: DistributionGateway
📤
Kafka Publisher
Publishes domain events to Kafka topics for choreography-based sagas
implements: EventPublisher
Domain Layer
com.byld.advisory.domain/
model/
Goal, RiskProfile, ModelPortfolio
vo/
Money, Percentage, ISIN, PAN
event/
GoalCreated, RebalanceProposed
port/
GoalRepository, AdvisoryGateway
Application Layer
com.byld.advisory.application/
usecase/
CreateGoalUseCase
usecase/
ProposeRebalanceUseCase
dto/
GoalRequest, GoalResponse
mapper/
GoalMapper (MapStruct)
Infrastructure Layer
com.byld.advisory.infra/
web/
GoalController (@RestController)
persistence/
JpaGoalRepository
messaging/
KafkaEventPublisher
config/
SecurityConfig, KafkaConfig
Shared Kernel
com.byld.shared/
types/
Money, UserId, CorrelationId
event/
DomainEvent, EventMetadata
result/
Result<T>, Error
security/
Principal, Permission
The Dependency Rule
Source code dependencies point INWARD. The Domain layer has ZERO framework imports — no Spring, no JPA, no Kafka annotations. It is pure Java with interfaces (Ports) that the outer layers implement.
-- Clean Architecture, Robert C. Martin (2017)
Frameworks
Adapters
Use Cases
Domain