일반적인 웹 어플리케이션 구조
- 컨트롤러: 웹 MVC의 컨트롤러 역할
- 서비스: 핵심 비즈니스 로직 구현
- 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
- 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨
회원 객체
public class Member {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
회원 레퍼지토리 인터페이스
=> db 접근하여 객체 관리
public interface MemberRepository {
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
회원 리포지토리 메모리 구현체
public class MemoryMemberRepository implements MemberRepository {
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
@Override
public Member save(Member member) {
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
@Override
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
@Override
public Optional<Member> findByName(String name) {
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny();
}
public void clearStore() {
store.clear();
}
}
Optional 사용
https://timi-d.tistory.com/323
회원 서비스
=> 비지니스 로직
public class MemberService {
private final MemberRepository memberRepository = new
MemoryMemberRepository();
* 회원가입 *
public Long join(Member member) {
validateDuplicateMember(member); //중복 회원 검증
memberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
}); }
* 전체 회원 조회 *
public List<Member> findMembers() {
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId) {
return memberRepository.findById(memberId);
}
}
'강의 > Spring' 카테고리의 다른 글
[Spring 입문] 5. 웹 MVC 개발/Thymeleaf (0) | 2023.12.11 |
---|---|
[Spring 입문] 4. 스프링 빈과 의존관계 (1) | 2023.12.11 |
[Spring 입문] 2. spring 웹 개발 기초 (0) | 2023.08.08 |
[Spring 입문] 1-2 라이브러리 살펴보기, view 환경설정, 빌드 실행 (0) | 2023.08.07 |
[Spring 입문] 1-1 프로젝트 생성 및 IntelliJ 설치 (0) | 2023.08.06 |