ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 상품 웹 사이트 - 도메인 개발
    스프링/스프링 MVC 패턴 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());
        }
    }

    위의 도메인 코드들이 잘 실행되는지 확인해주는 테스트코드이다.

    이전 게시글에서 정리한 내용도 있고, 그렇게 어렵지 않은 코드들이기에 이해하는데 크게 어렵지 않았다.

     

    우선 도메인은 이렇게 만들게 되었고, 이제 사용자가 직접 입력되면 서버에 자동으로 저장되고, 웹 사이트 이동을 자유자제로 할 수 있도록 설계해야한다.

Designed by Tistory.