Business Rule ์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ํ Specification Pattern ์ค๊ณ
C#: ๐ง๐ต๐ฒ ๐ฆ๐ฝ๐ฒ๐ฐ๐ถ๐ณ๐ถ๐ฐ๐ฎ๐๐ถ๐ผ๐ป ๐ฃ๐ฎ๐๐๐ฒ๐ฟ๐ป
AI ์์ฝ
Context
๋น์ฆ๋์ค ๊ท์น์ด Query, Command, Validation, Test ๋ฑ ์ฌ๋ฌ ๊ณ์ธต์ ํํธํ๋์ด ๋ฐ์ํ๋ ์ฝ๋ ์ค๋ณต ๋ฌธ์ . ๊ท์น ๋ณ๊ฒฝ ์ ๋ชจ๋ ์ง์ ์ ์์ ํด์ผ ํ๋ ์ ์ง๋ณด์ ๋น์ฉ ์ฆ๊ฐ ๋ฐ ์ ํฉ์ฑ ๊ฒฐ์ฌ๊ฐ ์ฃผ์ ํ๊ณ์ .
Technical Solution
- ๋น์ฆ๋์ค ๊ท์น์ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ก ์บก์ํํ Specification Pattern ๋์
- ToExpression() ๋ฉ์๋๋ฅผ ํตํ Database Query๋ก์ ์ง์ ๋ณํ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฒจ ํํฐ๋ง ์ต์ ํ
- IsSatisfiedBy() ๋ฉ์๋๋ฅผ ํ์ฉํ ๋ฉ๋ชจ๋ฆฌ ๋ด ๊ฐ์ฒด ์ํ ๊ฒ์ฆ ๋ฐ ๋๋ฉ์ธ ์ ํจ์ฑ ์ฒดํฌ
- And(), Or(), Not() ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ๋ณตํฉ Specification ์กฐํฉ์ผ๋ก ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ์ ์ธ์ ๊ตฌ์ฑ
- ๋๋ฉ์ธ ๊ท์น์ DB ์์กด์ฑ ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒ์ฆํ๋ Unit Test ๊ตฌ์กฐ ์ค๊ณ
์ค์ฒ ํฌ์ธํธ
1. ๋์ผํ ํํฐ๋ง/๊ฒ์ฆ ๋ก์ง์ด 2๊ณณ ์ด์์ ๊ณ์ธต์์ ์ค๋ณต๋๋์ง ํ์ธ
2. ๋จ์ Boolean ๋ฉ์๋๋ฅผ ๋์ด IQueryable๋ก ๋ณํ ๊ฐ๋ฅํ Expression ๊ธฐ๋ฐ ์ค๊ณ ๊ฒํ
3. ๋ณตํฉ ์กฐ๊ฑด ์์ฑ ์ Composite Pattern์ ์ ์ฉํ์ฌ Specification ์กฐํฉ ๊ฐ๋ฅ ์ฌ๋ถ ํ๋จ
4. ๋๋ฉ์ธ ๊ท์น์ ํ ์คํธ ์ฝ๋ ์์ฑ ์ DB Mocking ์์ด Specification ๋จ๋ ํ ์คํธ ๊ฐ๋ฅ์ฑ ๊ฒํ