Skip to content

Commit daa4ab7

Browse files
committed
ddd+tdd练习
1 parent 38b4937 commit daa4ab7

14 files changed

Lines changed: 346 additions & 1 deletion

pom.xml

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@
99
<version>1.0-SNAPSHOT</version>
1010

1111
<dependencies>
12+
<dependency>
13+
<groupId>org.projectlombok</groupId>
14+
<artifactId>lombok</artifactId>
15+
<version>1.16.16</version>
16+
</dependency>
17+
<dependency>
18+
<groupId>com.google.guava</groupId>
19+
<artifactId>guava</artifactId>
20+
<version>19.0</version>
21+
</dependency>
1222
<dependency>
1323
<groupId>junit</groupId>
1424
<artifactId>junit</artifactId>
@@ -17,7 +27,7 @@
1727
<scope>test</scope>
1828
<optional>true</optional>
1929
</dependency>
20-
<dependency>
30+
<dependency>
2131
<groupId>org.mockito</groupId>
2232
<artifactId>mockito-all</artifactId>
2333
<version>1.9.5</version>
@@ -29,4 +39,19 @@
2939
<version>2.0M10</version>
3040
</dependency>
3141
</dependencies>
42+
<build>
43+
<plugins>
44+
<plugin>
45+
<groupId>org.apache.maven.plugins</groupId>
46+
<artifactId>maven-compiler-plugin</artifactId>
47+
<version>2.3.2</version>
48+
<configuration>
49+
<source>1.8</source>
50+
<target>1.8</target>
51+
<encoding>UTF-8</encoding>
52+
<showWarnings>true</showWarnings>
53+
</configuration>
54+
</plugin>
55+
</plugins>
56+
</build>
3257
</project>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.dmall.common;
2+
3+
/**
4+
* 标注事务。Dummy...
5+
*/
6+
public @interface Transactional {
7+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.dmall.order.domain.model;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@AllArgsConstructor
8+
public class CustomerContact {
9+
private String name;
10+
private String address;
11+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.dmall.order.domain.model;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NonNull;
6+
import lombok.RequiredArgsConstructor;
7+
8+
import java.util.*;
9+
10+
@AllArgsConstructor
11+
@RequiredArgsConstructor
12+
public class Order implements Cloneable {
13+
@NonNull
14+
@Getter
15+
private UUID id;
16+
@NonNull
17+
@Getter
18+
private Date createdDate;
19+
@NonNull
20+
@Getter
21+
private CustomerContact customerContact;
22+
@NonNull
23+
@Getter
24+
private OrderItem[] orderItems;
25+
26+
private List<OrderEvent.OrderEventEnum> orderEvents = new ArrayList<>();
27+
28+
public OrderEvent.OrderEventEnum getStatus() {
29+
return orderEvents.get(orderEvents.size() - 1);
30+
}
31+
32+
public List<OrderEvent.OrderEventEnum> getStatusRoad() {
33+
return Collections.unmodifiableList(orderEvents);
34+
}
35+
36+
public void addStatus(OrderEvent.OrderEventEnum submitted) {
37+
orderEvents.add(submitted);
38+
}
39+
40+
@Override
41+
public Object clone() {
42+
try {
43+
return super.clone();
44+
} catch (CloneNotSupportedException e) {
45+
throw new RuntimeException(e);
46+
}
47+
}
48+
49+
/**
50+
* fixme 用于解决Map存储中,对象引用一直存在的问题,是否有其他方案解决?
51+
*
52+
* @return
53+
*/
54+
public Order cloneForMemDB() {
55+
Order clone = (Order) clone();
56+
clone.orderEvents = new ArrayList<>();
57+
return clone;
58+
}
59+
60+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.dmall.order.domain.model;
2+
3+
import lombok.AccessLevel;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Getter;
7+
8+
import java.util.UUID;
9+
10+
@Getter
11+
@AllArgsConstructor
12+
@Builder
13+
public class OrderEvent {
14+
15+
private UUID orderId;
16+
private OrderEventEnum orderEvent;
17+
18+
public OrderEvent() {
19+
}
20+
21+
public static enum OrderEventEnum {
22+
Submitted, Created, Paid, Cancel
23+
}
24+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.dmall.order.domain.model;
2+
3+
import java.util.List;
4+
import java.util.UUID;
5+
6+
public interface OrderEventRepository {
7+
8+
OrderEvent findByOrderIdLast(UUID orderId);
9+
10+
List<OrderEvent> findByOrderIdAll(UUID orderId);
11+
12+
public boolean save(OrderEvent order);
13+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.dmall.order.domain.model;
2+
3+
import java.util.Date;
4+
import java.util.UUID;
5+
6+
public class OrderFactory {
7+
public static Order createOrder(String name, String address) {
8+
CustomerContact customerContact = new CustomerContact(name, address);
9+
OrderItem[] orderItems = new OrderItem[]{};
10+
Order order = new Order(UUID.randomUUID(), new Date(), customerContact, orderItems);
11+
order.addStatus(OrderEvent.OrderEventEnum.Submitted);
12+
return order;
13+
}
14+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.dmall.order.domain.model;
2+
3+
import lombok.Getter;
4+
5+
@Getter
6+
public class OrderItem {
7+
private Integer amount;
8+
private ProductSnapshot productSnapshot;
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.dmall.order.domain.model;
2+
3+
import java.util.UUID;
4+
5+
public interface OrderRepository {
6+
public Order findById(UUID orderId);
7+
8+
public void save(Order order);
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.dmall.order.domain.model;
2+
3+
import lombok.Getter;
4+
5+
@Getter
6+
public class ProductSnapshot {
7+
private String sku;
8+
private Double price;
9+
}

0 commit comments

Comments
 (0)