스프링/스프링 MVC 패턴
상품 웹 사이트 - 도메인 개발
chanhee01
2023. 2. 16. 14:27
상품 목록을 보여주고 새로운 상품을 만들고 수정할 수 있는 웹 사이트를 만들어보았다.
Item Class
@Data // 실무에서는 @Getter @Setter 쓰고 Data는 잘 안씀
public class Item {
private Long id;
private String itemName;
private Integer price;
private Integer quantity;
public Item() {
}
public Item(String itemName, Integer price, Integer quantity) {
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
}
Item 클래스를 만들었는데, id는 상품을 생성할 때마다 1부터 하나씩 증가하도록 설정할 것이다. 나머지 값들은 생성자를 이용해서 생성을 할 때 사용자가 입력할 수 있도록 할 것이다.
Item Repository
@Repository
public class ItemRepository {
private static final Map<Long, Item> store = new HashMap<>();
private static long sequence = 0L;
public Item save(Item item) {
item.setId(++sequence);
store.put(item.getId(), item);
return item;
}
public Item findById(Long id) {
return store.get(id);
}
public List<Item> findAll() {
return new ArrayList<>(store.values());
}
public void update(Long itemId, Item updateParam) {
Item findItem = findById(itemId);
findItem.setItemName(updateParam.getItemName());
findItem.setPrice(updateParam.getPrice());
findItem.setQuantity(updateParam.getQuantity());
}
public void clearStore() {
store.clear();
}
}
item 저장소이다. 웹 사이트에서 아이템이름, 가격, 수량을 입력하고 저장버튼을 누르면 저장되는 기능을 만들고, 아이템을 수정하기 위한 findById와 아이템 목록 전체를 보여주는 findAll 메서드, 수정을 할 수 있는 update 메서드이다.
public class ItemRepositoryTest {
ItemRepository itemRepository = new ItemRepository();
@AfterEach
void afterEach() {
itemRepository.clearStore();
}
@Test
void save() {
// given
Item item = new Item("itemA", 10000, 10);
// when
Item saveItem = itemRepository.save(item);
// then
Item findItem = itemRepository.findById(item.getId());
assertThat(findItem).isEqualTo(saveItem);
}
@Test
void findAll() {
// given
Item item1 = new Item("item1", 10000, 10);
Item item2 = new Item("item2", 20000, 20);
itemRepository.save(item1);
itemRepository.save(item2);
// when
List<Item> result = itemRepository.findAll();
// then
assertThat(result.size()).isEqualTo(2);
assertThat(result).contains(item1, item2);
}
@Test
void updateItem() {
// given
Item item = new Item("item1", 10000, 10);
Item savedItem = itemRepository.save(item);
Long itemId = savedItem.getId();
// when
Item updateParam = new Item("item2", 2000, 30);
itemRepository.update(itemId, updateParam);
// then
Item findItem = itemRepository.findById(itemId);
assertThat(findItem.getItemName()).isEqualTo(updateParam.getItemName());
assertThat(findItem.getPrice()).isEqualTo(updateParam.getPrice());
assertThat(findItem.getQuantity()).isEqualTo(updateParam.getQuantity());
}
}
위의 도메인 코드들이 잘 실행되는지 확인해주는 테스트코드이다.
이전 게시글에서 정리한 내용도 있고, 그렇게 어렵지 않은 코드들이기에 이해하는데 크게 어렵지 않았다.
우선 도메인은 이렇게 만들게 되었고, 이제 사용자가 직접 입력되면 서버에 자동으로 저장되고, 웹 사이트 이동을 자유자제로 할 수 있도록 설계해야한다.