Requirements & DDD
Define user stories, acceptance examples, entities, value objects, aggregates and bounded contexts. Record why each service owns its data.
Build from domain requirements to Spring Boot services, events, RAG agents and a testing strategy. Inspect a logistics case with explicit validation and human review.
Define user stories, acceptance examples, entities, value objects, aggregates and bounded contexts. Record why each service owns its data.
Build REST controllers, application services, domain rules and persistence adapters. Practise Spring Web, Spring Data JPA and local H2; compare PostgreSQL for shared deployment.
Publish versioned domain events through Kafka. Handle duplicate messages, eventual consistency and event time. Build a rolling count or exception-rate view.
Connect a retriever, planner and independent validator. Compare direct LLM calls with bounded tools and a LangChain4j integration in Java.
Choose specification-based cases and structural checks, then add API contracts, integration tests, regression cases and security scenarios. Define the oracle for each test.
Keep setup instructions, traces, decisions, model assumptions and recovery notes. Explain which AI proposals you accepted, changed or rejected.
Start with Java or Python fundamentals, JSON and basic HTTP. The Spring Boot branch uses Java; Python remains useful for analysis, agent experiments and evaluation. One-to-one online sessions can focus on either branch.
A proposed learning project has four contexts: request intake, product catalogue, planning and review. Each owns its records and exposes an explicit API or event contract. A coordinator can retrieve policy, propose a plan and ask the planning service to validate it; an authorised person approves operational use.
Practise a Java 21 project with Spring Boot, JPA, Kafka/Spring Cloud Stream and LangChain4j. Begin with one vertical slice before introducing all four services. This public page does not run a Java backend or Kafka broker.
// Illustrative controller: application service owns validation.
@RestController
@RequestMapping("/plans")
class PlanController {
private final PlanningService planning;
PlanController(PlanningService planning) { this.planning = planning; }
@PostMapping("/proposals")
PlanProposal propose(@RequestBody PlanRequest request) {
return planning.proposeAndValidate(request);
}
}
// A proposal is not an approval or a dispatch instruction.A deterministic, browser-local simulation of agent responsibilities. It does not call a model, retrieve live documents or run microservices. The same boundaries can be implemented in the full project.
Partition valid and invalid inputs. For a capacity limit, test just below, exactly at and above it. Use decision tables for interacting rules.
Review branches, data flow and unreachable paths. Use linters and code review; branch coverage describes executed structure, not correctness by itself.
Use JUnit/AssertJ for domain invariants without a model and MockMvc for the HTTP boundary. Verify REST/event schemas, required fields, version compatibility and permitted tool arguments.
Use Spring Boot integration tests and isolated database/broker instances, for example through Testcontainers. Exercise persistence, message delivery, idempotency, timeouts and a full request-to-review journey.
Test unauthorised tools, prompt injection and absent evidence. Separately evaluate retrieval relevance, source support and answer quality on a labelled set.
Keep known failures as regression cases. Track risk, requirements, test owners and release decisions. Model checking is an advanced way to examine state-machine properties.
No. A mocked boundary can verify routing and validation. Actual model quality, latency, retrieval quality and cost need their own measured evaluation.
# Acceptance cases for the domain validator
assert validate(weight=60, capacity=60) == "review"
assert validate(weight=61, capacity=60) == "blocked"
# Also test: missing evidence, duplicate events and forbidden tools.
# A valid proposal still requires a human approval step.These are independently authored studio learning materials, informed by software-engineering and testing topics. They are not an official university course or a reproduction of student work. No student reports, identities, marks or source repositories are published.