Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 30 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@

项目为 Maven 工程(见 `pom.xml`):

- `groupId`: `com.nerosoft`
- `artifactId`: `Mediator`
- `groupId`: `com.neroyun`
- `artifactId`: `mediator`
- `version`: `1.0.0`
- 测试依赖:`org.junit.jupiter:junit-jupiter:6.0.3`
- 编译版本:`maven.compiler.source/target = 25`
Expand Down Expand Up @@ -98,8 +98,8 @@ mediator.send(new UserCreateCommand("Alice", "alice@example.com"));

```xml
<dependency>
<groupId>com.nerosoft</groupId>
<artifactId>Mediator</artifactId>
<groupId>com.neroyun</groupId>
<artifactId>mediator</artifactId>
<version>1.0.0</version>
</dependency>
```
Expand Down Expand Up @@ -127,7 +127,8 @@ public class UserCreateCommandValidator implements Validator<UserCreateCommand>
### 3. 在配置类中组装 `PipelinedMediator`

```java
import com.nerosoft.mediator.*;

import com.neroyun.mediator.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand All @@ -137,34 +138,34 @@ import java.util.concurrent.Executors;
@Configuration
public class MediatorConfiguration {

@Bean
public Mediator mediator(ApplicationContext applicationContext) {
return new PipelinedMediator()
.use(() -> applicationContext.getBeansOfType(Handler.class).values().stream())
.use(() -> applicationContext.getBeansOfType(Validator.class).values().stream())
.use(() -> applicationContext.getBeansOfType(Middleware.class).values().stream())
.use(() -> Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()));
}
@Bean
public Mediator mediator(ApplicationContext applicationContext) {
return new PipelinedMediator()
.use(() -> applicationContext.getBeansOfType(Handler.class).values().stream())
.use(() -> applicationContext.getBeansOfType(Validator.class).values().stream())
.use(() -> applicationContext.getBeansOfType(Middleware.class).values().stream())
.use(() -> Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()));
}
}
```

### 4. 在业务服务中使用

```java
import com.nerosoft.mediator.Mediator;
import com.neroyun.mediator.Mediator;
import org.springframework.stereotype.Service;

@Service
public class UserApplicationService {
private final Mediator mediator;
private final Mediator mediator;

public UserApplicationService(Mediator mediator) {
this.mediator = mediator;
}
public UserApplicationService(Mediator mediator) {
this.mediator = mediator;
}

public void createUser(String name, String email) {
mediator.send(new UserCreateCommand(name, email));
}
public void createUser(String name, String email) {
mediator.send(new UserCreateCommand(name, email));
}
}
```

Expand All @@ -181,9 +182,12 @@ public class UserApplicationService {
### 1. 中间件接口

```java
import com.neroyun.mediator.internal.Message;
import com.neroyun.mediator.internal.MiddlewareDelegate;

@FunctionalInterface
public interface Middleware {
Object handle(com.nerosoft.mediator.internal.Message message, com.nerosoft.mediator.internal.MiddlewareDelegate next);
Object handle(internal.com.neroyun.mediator.Message message, internal.com.neroyun.mediator.MiddlewareDelegate next);
}
```

Expand Down Expand Up @@ -280,15 +284,15 @@ public class UserCreatedEvent implements Event {}

## 包内容

- `com.nerosoft.mediator`
- `com.neroyun.mediator`
- 核心抽象:`Mediator`、`Command`、`Query`、`Event`
- 扩展点:`Handler`、`Middleware`、`Validator`
- 默认实现:`PipelinedMediator`
- `com.nerosoft.mediator.strategy`
- `com.neroyun.mediator.strategy`
- 事件并行与异常策略注解
- `com.nerosoft.mediator.validation`
- `com.neroyun.mediator.validation`
- `ValidationResult`、`ValidationException`
- `com.nerosoft.mediator.internal`
- `com.neroyun.mediator.internal`
- 内部支持类型(消息基类、流供应器、异常聚合等)

## 快速构建
Expand Down
93 changes: 89 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,42 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.nerosoft</groupId>
<artifactId>Mediator</artifactId>
<groupId>com.neroyun</groupId>
<artifactId>mediator</artifactId>
<version>1.0.0</version>
<name>Mediator</name>
<description>A simple mediator pattern implementation in Java</description>
<url>https://github.com/nerosoftdev/mediator</url>

<licenses>
<license>
<name>GNU GENERAL PUBLIC LICENSE Version 3</name>
<url>https://github.com/NerosoftDev/Mediator/blob/master/LICENSE</url>
</license>
</licenses>

<developers>
<developer>
<name>damon</name>
<url>https://zhaorong.me</url>
<email>zhaorong@outlook.com</email>
<roles>
<role>Developer</role>
<role>Maintainer</role>
<role>Owner</role>
</roles>
</developer>
</developers>

<scm>
<url>https://github.com/NerosoftDev/Mediator</url>
<connection>scm:git:git://github.com/NerosoftDev/Mediator.git</connection>
<developerConnection>scm:git:ssh://github.com/NerosoftDev/Mediator.git</developerConnection>
<tag>HEAD</tag>
</scm>

<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.release>17</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

Expand All @@ -28,4 +57,60 @@
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.10.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.2.7</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>0.10.0</version>
<extensions>true</extensions>
<configuration>
<publishingServerId>maven-default</publishingServerId>
<autoPublish>true</autoPublish>
<waitUntil>published</waitUntil>
</configuration>
</plugin>
</plugins>
</build>
</project>
4 changes: 0 additions & 4 deletions src/main/java/com/nerosoft/mediator/internal/Message.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.nerosoft.mediator;
package com.neroyun.mediator;

import com.nerosoft.mediator.internal.Message;
import com.nerosoft.mediator.internal.Validatable;
import com.neroyun.mediator.internal.Message;
import com.neroyun.mediator.internal.Validatable;

/**
* Represents a command that can be sent to the mediator.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.nerosoft.mediator;
package com.neroyun.mediator;

import com.nerosoft.mediator.internal.Message;
import com.neroyun.mediator.internal.Message;

/**
* Represents an event that can be published to the mediator.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.nerosoft.mediator;
package com.neroyun.mediator;

import com.nerosoft.mediator.internal.ExceptionHandle;
import com.neroyun.mediator.internal.ExceptionHandle;

import static java.util.concurrent.CompletableFuture.runAsync;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.nerosoft.mediator;
package com.neroyun.mediator;

import com.nerosoft.mediator.internal.Generic;
import com.nerosoft.mediator.internal.Message;
import com.neroyun.mediator.internal.Generic;
import com.neroyun.mediator.internal.Message;

/**
* Defines a handler interface for processing messages of type T and producing a response of type R.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nerosoft.mediator;
package com.neroyun.mediator;

/**
* Defines the Mediator interface for handling commands, queries, and events.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.nerosoft.mediator;
package com.neroyun.mediator;

import com.nerosoft.mediator.internal.Message;
import com.nerosoft.mediator.internal.MiddlewareDelegate;
import com.neroyun.mediator.internal.Message;
import com.neroyun.mediator.internal.MiddlewareDelegate;

/**
* Represents a middleware that can be used in the mediator pipeline.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.nerosoft.mediator;

import com.nerosoft.mediator.internal.*;
import com.nerosoft.mediator.strategy.HandlerExceptionStrategy;
import com.nerosoft.mediator.strategy.HandlerParallelStrategy;
import com.nerosoft.mediator.validation.ValidationException;
import com.nerosoft.mediator.validation.ValidationResult;
package com.neroyun.mediator;

import com.neroyun.mediator.internal.*;
import com.neroyun.mediator.internal.*;
import com.neroyun.mediator.strategy.HandlerExceptionStrategy;
import com.neroyun.mediator.strategy.HandlerParallelStrategy;
import com.neroyun.mediator.validation.ValidationException;
import com.neroyun.mediator.validation.ValidationResult;

import java.util.List;
import java.util.Objects;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.nerosoft.mediator;
package com.neroyun.mediator;

import com.nerosoft.mediator.internal.Message;
import com.nerosoft.mediator.internal.Validatable;
import com.neroyun.mediator.internal.Message;
import com.neroyun.mediator.internal.Validatable;

/**
* Represents a query that can be sent to the mediator.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.nerosoft.mediator;
package com.neroyun.mediator;

import com.nerosoft.mediator.internal.Message;
import com.nerosoft.mediator.internal.Validatable;
import com.nerosoft.mediator.validation.ValidationResult;
import com.neroyun.mediator.internal.Message;
import com.neroyun.mediator.internal.Validatable;
import com.neroyun.mediator.validation.ValidationResult;

/**
* Defines a contract for validating messages before they are processed by the mediator.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nerosoft.mediator.internal;
package com.neroyun.mediator.internal;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nerosoft.mediator.internal;
package com.neroyun.mediator.internal;

@FunctionalInterface
public interface ExceptionHandle {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nerosoft.mediator.internal;
package com.neroyun.mediator.internal;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.nerosoft.mediator.internal;
package com.neroyun.mediator.internal;

import com.nerosoft.mediator.Handler;
import com.neroyun.mediator.Handler;

import java.util.stream.Stream;

Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/neroyun/mediator/internal/Message.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.neroyun.mediator.internal;

/**
* Represents a message that can be sent through the mediator.
* This can be a command, an event, or a query.
*
* @param <R> the type of the result produced by this message
*/
public interface Message<R> {
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nerosoft.mediator.internal;
package com.neroyun.mediator.internal;

/**
* The next invocation of the middleware chain.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.nerosoft.mediator.internal;
package com.neroyun.mediator.internal;

import com.nerosoft.mediator.Middleware;
import com.neroyun.mediator.Middleware;

import java.util.stream.Stream;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nerosoft.mediator.internal;
package com.neroyun.mediator.internal;

import java.util.Iterator;
import java.util.LinkedList;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.nerosoft.mediator.internal;
package com.neroyun.mediator.internal;

import java.util.stream.Stream;

Expand Down
Loading
Loading