π»[Code Review] OrderItem
μμ±μμ μ μ ν©ν 리 λ©μλμ λν 리뷰.
π€ OrderItem μμ±μμ μ μ ν©ν 리 λ©μλμ λν μ§λ¬Έ
π νμ¬ μ½λ μν©
1. @Builder
μ΄λ
Έν
μ΄μ
μ νμ©ν μμ±μ
OrderItem
μμ± μμλ λ΄λΆμ λͺ¨λ νλκ° ν¬ν¨λμ΄ μμ΅λλ€.
@Builder
public OrderItem(String orderItemId,
Order order,
Product product,
int quantity,
int orderPrice) {
this.orderItemId = orderItemId;
this.order = order;
this.product = product;
this.quantity = quantity;
this.orderPrice = orderPrice;
}
2. createOrderItem
μ μ ν©ν 리 λ©μλ
νμ§λ§ μ μ ν©ν 리 λ©μλμμλ orderPrice
νλΌλ―Έν°κ° λλ½λμ΄ μμ΅λλ€.
public static OrderItem createOrderItem(String orderItemId,
Order order, // [1] Order κ°μ²΄λ₯Ό νλΌλ―Έν°λ‘ λ°μ
Product product,
int quantity) { // [2] orderPriceλ λ΄λΆμμ κ°μ Έμ€λ―λ‘ νλΌλ―Έν° μ κ±°
// μ¬κ³ νμΈ λ‘μ§
if (product.getStockQuantity() < quantity) {
throw new IllegalArgumentException("μνμ μ¬κ³ κ° λΆμ‘±ν©λλ€.");
}
// OrderItem μμ±
OrderItem orderItem = OrderItem.builder()
.orderItemId(orderItemId)
.product(product)
.quantity(quantity)
.orderPrice(product.getProductRegularPrice()) // π μ¬κΈ°μ λ΄λΆμ μΌλ‘ μ€μ
.build();
order.addOrderItem(orderItem); // [3] Orderμ μ°κ΄κ΄κ³ νΈμ λ©μλ νΈμΆ
return orderItem;
}
β μ§λ¬Έ
μ createOrderItem
μ μ λ©μλλ orderPrice
νλκ° νλΌλ―Έν°μμ λΉ μ Έ μλμ?
- μμ±μμμλ
orderPrice
λ₯Ό μΈλΆμμ λ°κ³ μλλ° - μ μ ν©ν 리 λ©μλμμλ
product.getProductRegularPrice()
λ‘ λ΄λΆμμ μλμΌλ‘ μ€μ νκ³ μμ΅λλ€
μ΄λ κ² μ€κ³ν μ΄μ λ μλκ° λ¬΄μμΈμ§ κΆκΈν©λλ€.
π‘ OrderItem μμ±μμ μ μ ν©ν 리 λ©μλμ λν λ΅λ³
κ°μ²΄μ§ν₯ μ€κ³μ ν΅μ¬μ κΏ°λ«λ μμ£Ό μ’μ μ§λ¬Έμ λλ€.
λ λ©μλμ νλΌλ―Έν°κ° λ€λ₯Έ μ΄μ λ κ°μμ μν κ³Ό μ±
μμ΄ λ€λ₯΄κΈ° λλ¬Έμ
λλ€. createOrderItem
μ μ ν©ν 리 λ©μλμμ orderPrice
κ° λΉ μ§ κ²μ μλλ, λ§€μ° μ€μν μ€κ³μ
λλ€.
π― ν΅μ¬: βλκ° κ°κ²©μ κ²°μ ν μ± μμ΄ μλκ°?β
μ΄ μ€κ³μ ν΅μ¬ μ§λ¬Έμ μ΄κ²μ λλ€:
βμ£Όλ¬Έ νλͺ©(
OrderItem
)μ΄ μμ±λ λ, κ·Έ μ£Όλ¬Έ κ°κ²©(orderPrice
)μ λκ° μ ν΄μΌ νλκ°?β
μ λ΅: μΈλΆ(μλΉμ€ κ³μΈ΅/Service Layer)κ° μλλΌ, OrderItem
κ°μ²΄ μ€μ€λ‘κ° μ£Όλ¬Έ μμ μ Product
κ°κ²©μ λ³΄κ³ κ²°μ ν΄μΌ νλ€
createOrderItem
λ©μλλ λ°λ‘ μ΄ μ±
μμ μννκΈ° μν΄ orderPrice
λ₯Ό νλΌλ―Έν°λ‘ λ°μ§ μλ κ²μ
λλ€.
π λ λ©μλμ μν λΉκ΅
1. @Builder
κ° μ μ©λ μμ±μ
μν : λ¨μν κ°μ²΄ μμ± λꡬ
@Builder
public OrderItem(String orderItemId,
Order order,
Product product,
int quantity,
int orderPrice) { // π΄ μΈλΆμμ κ°μ λ°μμΌ ν¨
this.orderItemId = orderItemId;
this.order = order;
this.product = product;
this.quantity = quantity;
this.orderPrice = orderPrice; // π΄ κ·Έλλ‘ ν λΉλ§ ν¨
}
νΉμ§:
- Lombokμ΄ λ§λ€μ΄μ£Όλ λΉλλ κ°μ²΄λ₯Ό 쑰립νλ μν λ§ μν
- μ΄λ ν λΉμ¦λμ€ κ·μΉλ ν¬ν¨λμ΄ μμ§ μμ
- μλΉμ€ κ³μΈ΅μμ
orderPrice
λ₯Ό ν¬ν¨ν λͺ¨λ κ°μ μ§μ κ³μ°ν΄μ μ 곡ν΄μΌ ν¨ - β οΈ μν: μ€μλ‘ μλͺ»λ κ°κ²©μ λ£μ μ μμ
2. createOrderItem
μ μ ν©ν 리 λ©μλ
μν : λΉμ¦λμ€ κ·μΉμ΄ ν¬ν¨λ βμ€λ§νΈβ μμ±μ
public static OrderItem createOrderItem(String orderItemId,
Order order,
Product product,
int quantity) { // π’ orderPrice νλΌλ―Έν° μμ
// π’ λΉμ¦λμ€ κ·μΉ 1: μ¬κ³ νμΈ
if (product.getStockQuantity() < quantity) {
throw new IllegalArgumentException("μνμ μ¬κ³ κ° λΆμ‘±ν©λλ€.");
}
// π’ λΉμ¦λμ€ κ·μΉ 2: μ£Όλ¬Έ μμ κ°κ²© μλ μ€μ
OrderItem orderItem = OrderItem.builder()
.orderItemId(orderItemId)
.product(product)
.quantity(quantity)
.orderPrice(product.getProductRegularPrice()) // π’ λ΄λΆμμ μλμΌλ‘ μ€μ
.build();
order.addOrderItem(orderItem);
return orderItem;
}
νΉμ§:
-
μ¬κ³ νμΈ:
product.getStockQuantity() < quantity
λ‘μ§μΌλ‘ μ¬κ³ κ²μ¬ -
κ°κ²© κ²°μ : μ€μ€λ‘
Product
μ νμ¬ κ°κ²©μ μ‘°ννμ¬orderPrice
μ€μ - μμ μ±: μλΉμ€ κ³μΈ΅μ μ€μ κ°λ₯μ±μ μμ²μ μΌλ‘ μ°¨λ¨
- λΉμ¦λμ€ κ·μΉ 보μ₯: βμ£Όλ¬Έ κ°κ²©μ μ£Όλ¬Έ μμ μ μν κ°κ²©μ λ°λ₯Έλ€βλ κ·μΉμ κ°μ²΄ μ€μ€λ‘κ° λ³΄μ₯
π μ€μ μ¬μ© μμ λΉκ΅
β Builder μ§μ μ¬μ© μ (μνν λ°©λ²)
// μλΉμ€ κ³μΈ΅μμ μ€μν μ μλ μμ
OrderItem orderItem = OrderItem.builder()
.orderItemId("ORDER_ITEM_001")
.product(product)
.quantity(2)
.orderPrice(5000) // π΄ μ€μ μν κ°κ²©μ΄ 10000μμΈλ° μλͺ» μ
λ ₯!
.build();
β μ μ ν©ν 리 λ©μλ μ¬μ© μ (μμ ν λ°©λ²)
// μμ νκ³ μ¬λ°λ₯Έ λ°©λ²
OrderItem orderItem = OrderItem.createOrderItem(
"ORDER_ITEM_001",
order,
product, // κ°κ²©μ productμμ μλμΌλ‘ κ°μ Έμ΄
2
);
// π’ νμ μ νν μν κ°κ²©μ΄ μλμΌλ‘ μ€μ λ¨
ποΈ κ²°λ‘ : μ± μμ μμ
@Builder
= 쑰립 μ€λͺ
μ π
- λ¨μν λΆν(
orderItemId
,product
,quantity
,orderPrice
λ±)μ 쑰립νλ μν - μ΄λ€ κ°μ λ£μμ§λ μΈλΆμμ λͺ¨λ κ²°μ ν΄μΌ ν¨
createOrderItem
= μλνλ μμ° λΌμΈ π
- μ¬κ³ νμΈλΆν° κ°κ²© μ± μ κΉμ§ λͺ¨λ κ³Όμ μ μ± μ
- μ΅μνμ μ¬λ£(
product
,quantity
)λ§ λ£μ΄μ£Όλ©΄ μλ²½ν μ ν(OrderItem
) μμ° - 볡μ‘νκ³ μ€μν λ‘μ§μ κ°μ²΄ λ΄λΆλ‘ μΊ‘μν
β¨ κ°μ²΄μ§ν₯ μ€κ³μ ν΅μ¬
μ΄μ²λΌ κ°μ²΄ μμ±κ³Ό κ΄λ ¨λ 볡μ‘νκ³ μ€μν λ‘μ§μ κ°μ²΄ λ΄λΆλ‘ μ¨κΈ°κ³ (μΊ‘μν), μΈλΆμλ κ°λ¨ν μΈν°νμ΄μ€(createOrderItem
)λ§ μ 곡νλ κ²μ΄ λ°λ‘ κ°μ²΄μ§ν₯ μ€κ³μ ν΅μ¬μ
λλ€.
μ΄ μ€κ³λ₯Ό ν΅ν΄ μ½λλ:
- π‘οΈ λ μμ νκ³ (μλͺ»λ λ°μ΄ν° μ λ ₯ λ°©μ§)
- π λ λͺ ννλ©° (λΉμ¦λμ€ κ·μΉμ΄ λͺ μμ )
- π§ λ μ μ§λ³΄μνκΈ° μ’μμ§λλ€ (λ³κ²½ μ μν₯ λ²μ μ΅μν)