Skip to content

DDD(Domain Driven Design) base package for java

Notifications You must be signed in to change notification settings

jason8888888/ddd-base

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DDD Base

Domain Driven Design base package for Java.

How to use it in Java?

Please refer https://jitpack.io/#linux-china/ddd-base/1.1.0

Features

Components

  • Data: Entity, VO and Aggregate
  • Behaviour: Repository, Service, Factory and Specification
  • Event
  • Infrastructure

Reactive

DDD + Reactive(RSocket) to make context map easy.

Code Structure

Please visit src/test/java for code structure

If you use Kotlin to develop application, the structure will be different, please add entity, vo and repository in the same kt file.

Events

Please extend DomainEvent or DomainEventBuilder, then use ApplicationEventPublisher to publish the event. please refer https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2

Attention: Spring framework 5.2 will add reactive support: spring-projects/spring-framework#21831

Event extensions(JavaScript Object):

  • Distributed Tracing extension(traceparent, tracestate): embeds context from Distributed Tracing so that distributed systems can include traces that span an event-driven system.
  • Dataref(dataref): reference another location where this information is stored
  • Partitioning(partitionkey): This extension defines an attribute for use by message brokers and their clients that support partitioning of events, typically for the purpose of scaling.
  • Sequence(sequence): describe the position of an event in the ordered sequence of events produced by a unique event source
  • Sampling(sampledrate): Sampling

CloudEvents JSONSchema: https://github.com/cloudevents/spec/blob/v0.3/spec.json

How to create event class

  • Extend CloudEvent class:
public class LoginEvent extends CloudEvent<String> {

    public LoginEvent(String email, String ip) {
        setData(email);
        setContentType("text/plain");
        setExtension("ip", ip);
    }
}
  • Create object directly
CloudEvent<String> loginEvent = new CloudEvent<String>("text/plain", "linux_china@hotmail.com");
  • Event Builder or reactive processor
CloudEvent<String> loginEvent = CloudEventBuilder.<String>newInstance().contentType("text/plain").data("linux_china@hotmail.com").build();

ObjectMapper

  • ObjectMapper creation
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
  • write as String
objectMapper.writeValueAsString(loginEvent);
  • read from json text
objectMapper.readValue(jsonText, new TypeReference<CloudEvent<String>>() {});

References

About

DDD(Domain Driven Design) base package for java

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%