Skip to content

Commit

Permalink
domain 2.0.0 add recycler
Browse files Browse the repository at this point in the history
  • Loading branch information
tanghanzheng committed Aug 19, 2023
1 parent 525ebee commit 90682a6
Show file tree
Hide file tree
Showing 7 changed files with 133 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ protected void validate(DomainValidator validator) {
validator.validate(this);
}

/**
* 初始化一些默认值
*/
protected void init() {

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ public abstract class AbstractDomainRepository<T extends DomainObject, C extends
*/
public abstract P do2po(T object);

/**
* 领域模型转数据模型
*/
public Collection<P> dos2pos(Collection<? extends T> objects) {
return objects.stream().map(this::do2po).collect(Collectors.toList());
}
Expand All @@ -33,6 +36,9 @@ public Collection<P> dos2pos(Collection<? extends T> objects) {
*/
public abstract T po2do(P po);

/**
* 数据模型转领域模型
*/
public Collection<T> pos2dos(Collection<? extends P> pos) {
return pos.stream().map(this::po2do).collect(Collectors.toList());
}
Expand Down Expand Up @@ -102,11 +108,17 @@ public void delete(T object) {
*/
protected abstract void doDelete(P po);

/**
* 删除多个领域模型
*/
@Override
public void delete(C collection) {
doDelete(dos2pos(collection.list()));
}

/**
* 删除多条记录
*/
protected abstract void doDelete(Collection<? extends P> pos);

/**
Expand Down Expand Up @@ -156,7 +168,7 @@ public void delete(Conditions conditions) {
protected abstract void doDelete(Conditions conditions);

/**
* 条件查询
* 条件查询一个领域模型
*/
@Override
public T get(Conditions conditions) {
Expand All @@ -171,10 +183,13 @@ public T get(Conditions conditions) {
}

/**
* 条件查询
* 条件查询一条数据
*/
protected abstract P doGet(Conditions conditions);

/**
* 条件查询多个领域模型
*/
@Override
public C select(Conditions conditions) {
if (intercept(conditions)) {
Expand All @@ -183,6 +198,9 @@ public C select(Conditions conditions) {
return wrap(pos2dos(doSelect(conditions)));
}

/**
* 条件查询多条数据
*/
protected abstract Collection<P> doSelect(Conditions conditions);

/**
Expand Down Expand Up @@ -226,6 +244,9 @@ protected boolean intercept(Conditions conditions) {
return false;
}

/**
* 将多条数据包装成领域集合
*/
protected C wrap(Collection<T> objects) {
Class<C> genericType = getGenericType();
DomainFactory factory = getFactory();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,37 +13,88 @@
*/
public interface DomainFactory {

/**
* 创建指定 id 的领域对象
*/
<T extends DomainObject> T createObject(Class<T> cls, String id);

/**
* 创建指定条件的领域对象
*/
<T extends DomainObject> T createObject(Class<T> cls, Conditions conditions);

/**
* 创建延迟调用的领域对象
*/
<T extends DomainObject> T createObject(Class<T> cls, Supplier<T> supplier);

/**
* 创建在指定集合中指定 id 的领域对象
*/
<T extends DomainObject> T createObject(Class<T> cls, DomainCollection<T> collection, String id);

/**
* 创建在指定集合断言过滤的领域对象
*/
<T extends DomainObject> T createObject(Class<T> cls, DomainCollection<T> collection, Predicate<T> predicate);

/**
* 创建 id 关联的领域对象 Map
*/
<T extends DomainObject, C extends DomainCollection<T>> Map<String, T> createObject(Class<C> cls, Collection<String> ownerIds, Function<Collection<String>, Map<String, String>> idMapping);

/**
* 创建 id 关联的领域对象 Map
*/
<T extends DomainObject, C extends DomainCollection<T>> Map<String, T> createObject(Class<T> dCls, Class<C> cCls, Collection<String> ownerIds, Function<Collection<String>, Map<String, String>> idMapping);

/**
* 创建指定 ids 的领域集合
*/
<C extends DomainCollection<?>> C createCollection(Class<C> cls, Collection<String> ids);

/**
* 创建指定条件的领域集合
*/
<C extends DomainCollection<?>> C createCollection(Class<C> cls, Conditions conditions);

/**
* 创建延迟调用的领域集合
*/
<T extends DomainObject, C extends DomainCollection<T>> C createCollection(Class<C> cls, Supplier<Collection<T>> supplier);

/**
* 创建在指定集合中指定 ids 的领域集合
*/
<T extends DomainObject, C extends DomainCollection<T>> C createCollection(Class<C> cls, C collection, Collection<String> ids);

/**
* 创建在指定集合断言过滤的领域集合
*/
<T extends DomainObject, C extends DomainCollection<T>> C createCollection(Class<C> cls, C collection, Predicate<T> predicate);

/**
* 创建 id 关联的领域集合 Map
*/
<T extends DomainObject, C extends DomainCollection<T>> Map<String, C> createCollection(Class<C> cls, Collection<String> ownerIds, Function<Collection<String>, Map<String, ? extends Collection<String>>> idsMapping);

/**
* 创建 id 关联的领域集合 Map
*/
<T extends DomainObject, C extends DomainCollection<T>> Map<String, C> createCollection(Class<T> dCls, Class<C> cCls, Collection<String> ownerIds, Function<Collection<String>, Map<String, ? extends Collection<String>>> idsMapping);

/**
* 包装成领域对象
*/
<T extends DomainObject> T wrapObject(Class<T> cls, T object);

/**
* 包装成领域集合
*/
<C extends DomainCollection<?>> C wrapCollection(Class<C> cls, Collection<? extends DomainObject> objects);

/**
* 空集合
*/
<C extends DomainCollection<?>> C emptyCollection(Class<C> cls);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

/**
Expand Down Expand Up @@ -87,7 +88,10 @@ protected void doDelete(Collection<? extends P> pos) {
if (pos.isEmpty()) {
return;
}
getBaseMapper().deleteBatchIds(pos.stream().map(Identifiable::getId).collect(Collectors.toSet()));
Set<String> ids = pos.stream()
.map(Identifiable::getId)
.collect(Collectors.toSet());
getBaseMapper().deleteBatchIds(ids);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.github.linyuzai.domain.autoconfigure;

import com.github.linyuzai.domain.core.DomainValidator;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.BindingResult;
import org.springframework.validation.DirectFieldBindingResult;
import org.springframework.validation.FieldError;
Expand All @@ -12,13 +13,14 @@
/**
* 基于 Spring 的校验器
*/
@AllArgsConstructor
@Getter
@RequiredArgsConstructor
public class ApplicationDomainValidator implements DomainValidator {

/**
* org.springframework.validation.Validator
*/
private Validator validator;
private final Validator validator;

@Override
public void validate(Object target) {
Expand Down
2 changes: 1 addition & 1 deletion concept-domain/version.gradle
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ext.'ConceptDomainVersion' = '1.8.3'
ext.'ConceptDomainVersion' = '2.0.0'
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
import com.github.linyuzai.domain.core.condition.LambdaConditions;
import com.github.linyuzai.domain.core.mock.MockDomainContext;
import com.github.linyuzai.domain.core.proxy.ProxyDomainFactory;
import com.github.linyuzai.domain.core.recycler.DomainRecycler;
import com.github.linyuzai.domain.core.recycler.LinkedDomainRecycler;
import com.github.linyuzai.domain.core.recycler.ThreadLocalDomainRecycler;
import com.github.linyuzai.domain.mbp.MBPDomainIdGenerator;
import lombok.SneakyThrows;

Expand All @@ -16,7 +19,8 @@ public class DomainTest {
public DomainFactory getDomainFactory() {
UserRepository repository = new UserRepositoryImpl();
DomainContext context = new MockDomainContext(UserRepository.class, repository);
return new ProxyDomainFactory(context);
DomainRecycler recycler = new ThreadLocalDomainRecycler(new LinkedDomainRecycler());
return new ProxyDomainFactory(context, recycler);
}

public void testIdGenerator() {
Expand All @@ -29,7 +33,36 @@ public void testIdGenerator() {
}

public void test() {
testFactory10();
testRecycler();
//testFactory10(getDomainFactory());
}

public void doSomething(Object o) {

}

public void testRecycler() {
DomainFactory factory = getDomainFactory();
ThreadLocalDomainRecycler recycler = (ThreadLocalDomainRecycler) ((ProxyDomainFactory) factory).getRecycler();
long start = System.currentTimeMillis();
Set<Users2> users2s = new HashSet<>();
for (int i = 0; i < 1000000; i++) {
Map<String, Users2> map = factory.createCollection(Users2.class, Arrays.asList("1", "2", "3"), ids -> {
System.out.println("mapping");
Map<String, List<String>> idsMapping = new LinkedHashMap<>();
idsMapping.put("1", Arrays.asList("1","2"));
idsMapping.put("2", Arrays.asList("2","3"));
idsMapping.put("3", Arrays.asList("3","1"));
return idsMapping;
});
users2s.addAll(map.values());
recycler.recycle();
}
long span = System.currentTimeMillis() - start;
System.out.println("!!!!!!!!!!!!!!!!");
System.out.println(span);
System.out.println(users2s.size());
System.out.println("!!!!!!!!!!!!!!!!");
}

@SneakyThrows
Expand All @@ -49,38 +82,33 @@ public void testConditions() {
System.out.println(value);
}

public void testFactory1() {
DomainFactory factory = getDomainFactory();
public void testFactory1(DomainFactory factory) {
User user = factory.createObject(User.class, "1");
System.out.println(user.getId());
user.test0();
}

public void testFactory2() {
DomainFactory factory = getDomainFactory();
public void testFactory2(DomainFactory factory) {
User user = factory.createObject(User.class, new Conditions().equal("id", "2"));
System.out.println(user.getId());
user.test0();
}

public void testFactory3() {
DomainFactory factory = getDomainFactory();
public void testFactory3(DomainFactory factory) {
Users2 users = factory.createCollection(Users2.class, Arrays.asList("3", "_3"));
User user = factory.createObject(User.class, users, "3");
System.out.println(user.getId());
user.test0();
}

public void testFactory4() {
DomainFactory factory = getDomainFactory();
public void testFactory4(DomainFactory factory) {
Users2 users = factory.createCollection(Users2.class, Arrays.asList("4", "_4"));
User user = factory.createObject(User.class, users, u -> u.getId().equals("4"));
System.out.println(user.getId());
user.test0();
}

public void testFactory5() {
DomainFactory factory = getDomainFactory();
public void testFactory5(DomainFactory factory) {
Map<String, User> map = factory.createObject(Users2.class, Arrays.asList("5", "_5"), ids -> {
System.out.println("mapping");
Map<String, String> idMapping = new LinkedHashMap<>();
Expand All @@ -97,8 +125,7 @@ public void testFactory5() {
}
}

public void testFactory6() {
DomainFactory factory = getDomainFactory();
public void testFactory6(DomainFactory factory) {
Users2 users = factory.createCollection(Users2.class, Arrays.asList("6", "_6"));
for (User user : users.list()) {
System.out.println(user.getId());
Expand All @@ -109,8 +136,7 @@ public void testFactory6() {
users.test2();
}

public void testFactory7() {
DomainFactory factory = getDomainFactory();
public void testFactory7(DomainFactory factory) {
Users2 users = factory.createCollection(Users2.class, new Conditions()
.in("id", Arrays.asList("7", "_7")));
for (User user : users.list()) {
Expand All @@ -122,8 +148,7 @@ public void testFactory7() {
users.test2();
}

public void testFactory8() {
DomainFactory factory = getDomainFactory();
public void testFactory8(DomainFactory factory) {
Users2 us = factory.createCollection(Users2.class, Arrays.asList("8", "_8"));
Users2 users = factory.createCollection(Users2.class, us, Arrays.asList("8"));
for (User user : users.list()) {
Expand All @@ -135,8 +160,7 @@ public void testFactory8() {
users.test2();
}

public void testFactory9() {
DomainFactory factory = getDomainFactory();
public void testFactory9(DomainFactory factory) {
Users2 us = factory.createCollection(Users2.class, Arrays.asList("9", "_9"));
Users2 users = factory.createCollection(Users2.class, us, u -> u.getId().equals("9"));
for (User user : users.list()) {
Expand All @@ -148,8 +172,7 @@ public void testFactory9() {
users.test2();
}

public void testFactory10() {
DomainFactory factory = getDomainFactory();
public void testFactory10(DomainFactory factory) {
Map<String, Users2> map = factory.createCollection(Users2.class, Arrays.asList("10", "_10", "_"), ids -> {
System.out.println("mapping");
Map<String, List<String>> idsMapping = new LinkedHashMap<>();
Expand Down

0 comments on commit 90682a6

Please sign in to comment.