-
Notifications
You must be signed in to change notification settings - Fork 154
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
๐ 2๋จ๊ณ - ๋ฆฌํฉํฐ๋ง(๋ฉ๋ด) #144
base: choieungi
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ฉ๋ด ๋ฆฌํฉํฐ๋ง ์ํด์ฃผ์
จ๋ค์ ๐ฏ
๋ช๊ฐ์ง ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ๋ฅผ ๋จ๊ฒจ๋์๋๋ฐ, ํ์ธ ๋ถํ๋๋ ค์ ๐
if (Objects.isNull(price) || price.compareTo(BigDecimal.ZERO) < 0) { | ||
throw new IllegalArgumentException(); | ||
} | ||
public Menu create(final MenuRequest request) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ฏธ์
๋ด์ฉ๊ณผ๋ ์กฐ๊ธ ๋ฒ์ด๋ซ์ง๋ง ์ ๊ฐ Service Layer์ DTO๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ฐ ๋๋ฆด๊ฒ์.
ํ์ฌ๋ domain ํ์์ dto๋ก ์ ์ํด์ฃผ์
จ์ง๋ง DTO๋ฅผ Layer ๊ฐ ๊ตฌ๋ถ ์์ด ์ฌ์ฉํ ์๋ ์์ง๋ง Layer๊ฐ ๊ตฌ๋ถ์ ํ๋ค๋ฉด
MenuRequest ๊ฐ์ฒด๋ UI Layer ๊ณ์ธต์ ์ํ๋ DTO ๋ผ๊ณ ๋ณผ์ ์์ด์. (DTO๋ฅผ Layer๊ฐ ๊ตฌ๋ถ ์์ด ์ฌ์ฉํ๋ค๋ฉด ์ด๋์๊ฐ ๋ถํ์ํ ๋ฐ์ดํฐ๊ฐ ์นจ๋ฒํ ์ ์์ด์.)
ํ์ฌ Service Layer์ ์์ Layer๊ฐ ์นจ๋ฒํ๊ฒ์ ๋ณผ์ ์์ฃ .
๊ทธ๋ก ์ธํด ์ ํฌ ํ์์๋ Layer๊ฐ DTO ๋ถ๋ฆฌ๋ฅผ ํตํด ๊ณ์ธต์ ์๊ฒฉํ๊ฒ ๋๋๊ณ ์์ต๋๋ค.
UI Layer์์๋ Request / Response ์ ๊ฐ์ DTO ๋ค์ด๋ฐ์ ์ฌ์ฉํ๊ณ , Service Layer ๋ก ์ ๋ฌํ๊ธฐ ์ํด์ Command ์ ๊ฐ์ ๋ค์ด๋ฐ์ ์ฌ์ฉํ๊ณค ํฉ๋๋ค.
์ฐธ๊ณ ๋ง ๋ถํ๋๋ ค์ !
menu.setDisplayed(false); | ||
} | ||
} | ||
productPriceChangeEventPublisher.publishEvent(price, productId); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Application Event ํ์ฉ ๐
๊ฐ์ธ์ ์ธ ์๊ฐ์ผ๋ก Service Layer ์์ Event ๋ฅผ ๋ฐํํ๊ฒ ๋๋ค๋ฉด ๋๋ฉ์ธ ๋ก์ง์ด ์ดํ๋ฆฌ์ผ์ด์
๋ ์ด์ด๋ก ๋ถ์ฐ๋๋๊ฒ ๊ฐ์์.
JPA ๊ธฐ์ค ๋๋ฉ์ธ ์ด๋ฒคํธ๋ฅผ ๋ฐํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์๊ฐ ๋๋ฆด๊ฒ์ ๐
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ด๋ฒคํธ ๊ด๋ จ ํ
์คํธ์ ๋ํด์ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์
จ๋๋ฐ, ์ ๋ ๋๋ฉ์ธ ์ด๋ฒคํธ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค ๋ณด๋ ์ ํํ ๋ต๋ณ์ ๋จ๊ธฐ๊ธฐ ์ด๋ ค์ธ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ฉ์ธ ์ด๋ฒคํธ ๋ฐํ์ผ๋ก ๋ณ๊ฒฝํ๋ค๋ฉด, ๋๋ฉ์ธ ๋ฉ์๋๊ฐ ์คํ๋๊ณ , ์ด๋ฒคํธ๊ฐ ์ ์์ ์ผ๋ก ์ ์ฌ๋์๋์ง ํ์ธํ ์ ์์๊ฑฐ์์ ๐
} | ||
|
||
@Override | ||
public void onApplicationEvent(ProductPriceChangeEvent event) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ด๋ฒคํธ๋ฅผ ํ์ฉํ ๋์จํ ๊ฒฐํฉ ์ข๋ค์ ๐
final List<MenuProduct> menuProducts = new ArrayList<>(); | ||
final Menu menu = new Menu(UUID.randomUUID(), request.getName(), request.getPrice(), menuGroup, request.isDisplayed(), menuProducts); | ||
|
||
final List<MenuProductRequest> menuProductRequests = request.getMenuProducts(); | ||
final List<Product> products = productRepository.findAllByIdIn( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ฉ๋ด ์ปจํ
์คํธ์์ ์ํ ์กฐํ๋ฅผ ํ๊ฒ๋๋ค๋ฉด ์ปจํ
์คํธ๊ฐ ์นจ๋ฒ ๋ฐ ๊ฒฐํฉ์ด ๋ฐ์ํ์๋ค๊ณ ๋ณผ์ ์์ด์.
์ด๋ฌํ ๊ฒฐํฉ์ ์ค์ฌ๋ณผ์ ์์๊น์ ?
} | ||
|
||
public void setPrice(final BigDecimal price) { | ||
this.price = price; | ||
public void changePrice(final BigDecimal price) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ณ๊ฒฝํ๋ ค๋ ๋ฉ๋ด์ ๊ฐ๊ฒฉ์ด ์ํ ๊ธ์ก์ ํฉ๋ณด๋ค ์ ์๊ฒ์ ํญ์ ๋ง์กฑํ ์ ์์๊น์ ?
์๋ ํ์ธ์, 2๋จ๊ณ ๋ฏธ์ ์ ์ถ๋๋ฆฝ๋๋ค. ์ด๋ฒ ๋ฏธ์ ์ ๊ณ ๋ฏผํ ๋ถ๋ถ์ด ๋ง์๋ ๊ฒ ๊ฐ๋ค์! ์ ๋ ์ง์ ์ ์ผ๋ก ๋๋ฉ์ธ ์ฝ๋๋ฅผ ์์ ํด๊ฐ๋ฉฐ ์ฝ๋๋ฅผ ์์ฑํ์ด์ :)
๋ฉ๋ด์๋น์ค์์ ์ฌ์ฉ๋๋ ๊ฐ ๊ฒ์ฆ์ ์ต๋ํ ๋๋ฉ์ธ์์ ์งํํด๋ณด๋ ค ๋ ธ๋ ฅํ๋ ๊ฒ ๊ฐ์ต๋๋ค! ๊ทธ๋ผ์๋ ๋ฉ๋ด์๋น์ค์ ๊ฒ์ฆ ๋ก์ง์ ๋๋ฉ์ธ ๋ ์ด์ด๋ก ์จ์ ํ ์ฎ๊ธฐ์ง ๋ชปํ์ต๋๋ค. ์ด๋ ๋งฅ๋ฝ์ ์ผ๋ก ๋ถ์์ฐ์ค๋ฝ๋ค๊ณ ๋๊ปด์ ธ์ ์ฎ๊ธฐ์ง ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ, product์ menu context์ ๊ฒฐํฉ์ ๋๊ธฐ ์ํด์ event๋ฅผ ํตํด ๋ถ๋ฆฌํ์ต๋๋ค. ์ด๋ฒคํธ ๋ก์ง์ fake ๊ฐ์ฒด๋ก ๊ฒ์ฆํ๊ธฐ ์ด๋ ค์์
@SpringBootTest
๋ฅผ ์ด์ฉํด ํตํฉํ ์คํธ ๊ฒ์ฆ์ ์งํํ์ต๋๋ค.ํน์ ๋ ์ข์ ์ ์ธ์ด ์์ผ์๋ฉด ์ฝ๋ฉํธ ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.