μ΄λ² μ±ν°λ₯Ό μ½μΌλ©΄μ, κΈ°μ‘΄μ λ΄κ° μμ±νλ μ€νμΌμ λͺ¨νΈν κ°λ λ€μ΄ λͺ νν μ 리 λλ λλμ΄ λ€μλ€.
μ΄λ° κ°λ μ λͺ νν μΈμ§νλ©΄μ, μμΌλ‘μ μ½λλ₯Ό μμ±ν λλ©΄ kotlin μ€νμΌμ ν¨ν€μ§ μ 리μ μ’ λ μ§μ€ν΄μΌ λκ² λ€λ μκ°λ λ€μλ€.
λͺ¨λ λ΄μ©μ μ 리νμ§ μμ κ²μ΄λ©°, κΈ°μ‘΄μ μκ³ μλ λ΄μ© μ΄μΈμ μλ‘κ² λ°μ λ€μΈ λ΄μ©λ§ μ 리ν κ²μ΄λ€!!
λλ©μΈ μ΄λ²€νΈ
λ³κ²½μ λ¨μλ₯Ό λΉμ¦λμ€ μ²λ¦¬ κ³Όμ μμ λ°μν κ²°κ³Όλ‘ μ μ
μ΄λ²€νΈλ μ¬μ©μκ° λ¬΄μμΈκ° μ²λ¦¬νλλ‘ "μμ€ν "μ μμ²ν κ²μμ μ μ μλ ννΈμ΄λ©΄μ λ³κ²½μ΄ λ°μν μ΄μ μμ μ μ μλ€.
μ΄λ₯Ό ν λ©΄, PasswordChanged λΌλ κ°μ²΄μ λ€μ΄λ°μ 보면, λλ©μΈμμ μ΄λ€ μΌμ΄ μΌμ΄λ¬λμ§ μ¦μ μ΄ν΄κ° κ°λ₯νλ€.
public class QuantityChanged {
private String eventId;
private String productNo;
private int quantity;
private long time;
private QuantityChanged() {
this.eventId = UUID.randomUUID().toString();
this.time = System.currentTimeMillis();
}
public QuantityChanged(String productNo, int quantity) {
this();
this.productNo = productNo;
this.quantity = quantity;
}
ν΄λΉκ³Ό κ°μ λλ©μΈ μ΄λ²€νΈκ° μλ€λ©΄,
μ 그리거νΈμμλ μλμ κ°μ΄ event λ₯Ό 보κ΄ν μ μλ€.
class Cart {
private val cardId: String
private val items: List<Item>
private val events: List<Event>
public Cart(cartId: String) {
// ...
this.events = ArrayList<>()
}
fun changeQuantity(productNo: String, quantity: Int) {
// ...
val event = QuantityChanged(productNo, quantity)
events.add(event)
}
μ κ·Έλ¬κ±°νΈλ μμ κ°μ΄ λ³κ²½μ λν μ΄λ²€νΈλ₯Ό 보κ΄νλ€.
μ΄λ²€νΈ κ°μ²΄λ μλμ κ°μ΄ μΆμνκ° κ°λ₯νλ€.
abstract class Event {
private val eventId: String
private val time: Long
private val cartId: String
fun Event() {
this.event = UUID.randomUUID().toString()
this.time = System.currentTimeMillis()
}
fun getPayload(): String = JsonUtil.toJson(this)
}
class QuantityChanged: Event { // ... }
컀맨λμ μ΄λ²€νΈ
컀맨λλ
- νμλ₯Ό μ€ννλ λ°©λ²
- μ¬μ΄λ μ΄ννΈκ° μλ μμ
- μμ€ν μνλ₯Ό λ³κ²½νλ μλλ₯Ό κ°μ§ λ©μμ§ (νμ¬ μ§ννμ΄λ€.)
- μ¬μ©μ λλ μμ€ν μ λ€λ₯Έ λΆλΆμμ μμ±
μ΄λ²€νΈλ
- μ΄λ―Έ λ°μν μ¬μ€μ κ΄ν μ€λͺ
- λ°μν κ²μΌλ‘ κ³Όκ±°νμΌλ‘ λ€μ΄λ°
- μ΄λ²€νΈλ μμ€ν λ΄μμ λ°μν κ²μ΄λ€.
- λ©μλκ° λ°νν κ²μ΄ μλ, λͺ λ Ήμ μ€νν κ²°κ³Όμ΄λ€.
μ΄λ²€νΈ λͺ¨λΈλ§μ μμνλ©΄, μμ€ν μ λμμ λν΄μ μκ°νκ² λλ€.
컀맨λμ μ΄λ²€νΈλ₯Ό ν΅ν΄ λΉμ¦λμ€ νλ‘μΈμ€λ₯Ό λͺ ννκ³ μ½κ² μλ³ν μ μλ€.
application service λ‘ μ λ¬ λλ κ°μ²΄μΈ request dto λ₯Ό command λΌκ³ μΉν΄λ λμ§ μμκΉ?
μΈλΆλ‘λΆν° μμ² μ€λ μꡬ μ¬νμ λν΄ νμλ₯Ό μ€ννκ² νλ 주체μ΄μ κ°μ²΄μ΄μ§ μμκ°?
λ§λΆμ΄μλ©΄, command, event postfix λ₯Ό λΆμ΄κΈ° 보λ¨, νμμ λ μ§μ€ν λ€μ΄λ°μ μμ±νλλ‘ λ Έλ ₯ν΄λ³΄μ.
λ΄κ° μμ service, repository, dto λμ νμλ₯Ό μννλ κ°μ²΄ μ체μ μ΄λ¦μ λΆμ΄λ €κ³ λ Έλ ₯νλ μ΄μ μ΄λ€.
컀맨λλ μκΈ° μμ μ μ ν¨μ± κ²μ¬λ₯Ό μ€ννκ² ν΄λ μ’λ€κ³ νλ€.
μ΄λ²€νΈ μμ±μμλ 컀맨λμ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ λ©μλλ₯Ό κ°κ° νΈλ€λ¬ λΌ μΉνλ€.
λλ©μΈ μ΄λ²€νΈλ‘ λλ©μΈμ λ³κ²½ μ΄λ²€νΈλ₯Ό μ½κ² κΈ°λ‘ν μ μλ€.
μ΄λ²€νΈ μμ±μ μμ°μ€λ μ 그리거νΈμ λΉμ¦λμ€ λ‘μ§μ ꡬννλ ν¨κ³Όκ° μμΌλ©° λ 립μ μ΄λ©΄μ μ€μ©μ μΈ λ¨μ ν μ€νΈλ₯Ό κ°λ₯μΌ νλ€.