Spring/spring_old
06. service logic 구현
slow333
2023. 1. 20. 12:02
mapstore에서 구성한 내용을 DI를 통해 spring에서 주입 받아(DI) 이를 사용해서 서비스를 구현
실제 DI 때에는 구현체는 없고 interface만으로 구현하여 유연성을 갖음
실제 서비스에서 사용하는 class로 map store보다 세부적인 내용을 구현
@Service("clubService")
public class ClubServiceLogic implements ClubService {
// 인터페이스만 정의함, 사용 시점에 spring에서 구현 객체를 생성해서 DI해줌
private ClubStore clubStore;
public ClubServiceLogic(ClubStore clubStore) {
this.clubStore = clubStore;
// clubStore를 implement하는 것이 한개 뿐이라 ClubMapStore를 DI함
// 만약 한개 이상 이면 Qualifier annotation id를 통해 구분 가능함
}
/** 이렇게 생성하게 되면 관계가 tight 하다고 함
public ClubServiceLogic() {
this.clubStore = new ClubMapStore();
}
*/
@Override
public String registerClub(ClubCdo club) {
Club newClub = new Club(club.getName(), club.getIntro());
newClub.checkValidation();
return clubStore.create(newClub);
}
@Override
public List<Club> findClubsByName(String clubName) {
return clubStore.findByName(clubName);
}
@Override
public Optional<Club> findClubById(String id) {
return clubStore.findById(id);
}
@Override
public List<Club> findClubsByNameContaining(String name) {
if (clubStore.findByNameContaining(name).size() == 0) {
System.out.println("찾는 이름이 포함된 클럽이 없습니다.");
}
return clubStore.findByNameContaining(name);
}
@Override
public List<Club> findAll() {
return clubStore.findAll();
}
@Override
public void modifyClub(String clubId, NameAndValueList nameAndValueList) {
Optional<Club> foundedClub = clubStore.findById(clubId);
if (foundedClub.isEmpty()) {
throw new CannotFindException("그런 아이디를 갖는 클럽은 없습다. ID : "+ clubId);
}
foundedClub.ifPresent(club -> club.modifyValues(nameAndValueList));
clubStore.update(foundedClub.get()); // optional에서 값을 찾아 와야함 get() 필요
}
@Override
public void removeClub(String clubId) {
if(!clubStore.exists(clubId)){
throw new CannotFindException("그런 클럽 ID는 없어요 ID: "+clubId);
}
clubStore.delete(clubId);
}
@Override
public boolean exists(String clubId) {
return clubStore.exists(clubId);
}
}
@Service("memberService")
public class MemberServiceLogic implements MemberService {
private MemberStore memberStore;
@Autowired
public MemberServiceLogic(MemberStore memberStore) {
this.memberStore = memberStore;
// memberStore를 implement하는 것이 한개 뿐이라 MemberMapStore를 DI함
// 만약 한개 이상 이면 Qualifier annotation id를 통해 구분 가능함
}
@Override
public String registerMember(MemberCdo mbCdo) {
if (memberStore.findByEmail(mbCdo.getEmail()).isPresent()) {
throw new CannotFindException("이미 member의 이메일이 있습니다"+mbCdo.getEmail());
}
Member newMember =
new Member(mbCdo.getEmail(), mbCdo.getName(), mbCdo.getBirthDay(), mbCdo.getNickName(),mbCdo.getBirthDay());
memberStore.create(newMember);
return newMember.getId();
}
@Override
public Optional<Member> findMemberById(String memberId) {
if (memberStore.findById(memberId).isEmpty()) {
throw new CannotFindException("member service 없는 id : " + memberId);
}
return memberStore.findById(memberId);
}
@Override
public Optional<Member> findMemberByEmail(String memberEmail) {
if (memberStore.findById(memberEmail).isEmpty()) {
throw new CannotFindException("member service 없는 email : " + memberEmail);
}
return memberStore.findByEmail(memberEmail);
}
@Override
public List<Member> findMemberByName(String memberName) {
return memberStore.findByName(memberName);
}
@Override
public List<Member> findByMemberNameContaining(String memberName) {
return memberStore.findByNameContaining(memberName);
}
@Override
public List<Member> findAll() {
return memberStore.findAll();
}
@Override
public void modifyMember(String memberId, NameAndValueList nameAndValueList) {
Optional<Member> modMember = memberStore.findById(memberId);
if (memberStore.findById(memberId).isEmpty()) {
throw new CannotFindException("member service 없는 ID : " + memberId);
}
modMember.ifPresent(member -> member.modifyValues(nameAndValueList));
memberStore.update(modMember.get());
}
@Override
public void removeMember(String memberId) {
if (memberStore.findById(memberId).isEmpty()) {
throw new CannotFindException("member service 없는 ID : " + memberId);
}
memberStore.delete(memberId);
}
@Override
public boolean exists(String memberId) {
return Optional.ofNullable(memberStore.findById(memberId)).isPresent();
}
}
서비스 확인을 위해 App을 생성함(프로젝트의 시작 포인트)
public class TravelClubApp {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
String[] beanNames = context.getBeanDefinitionNames();
// System.out.println(appName);
System.out.println(Arrays.toString(beanNames));
// club service 시험 +++++++++++++++++++++++++++++
ClubCdo clubCdo = new ClubCdo("여행자 club 1번", "시험용 첫번째 여행 클럽 입니다.");
ClubCdo clubCdo1 = new ClubCdo("여행자 클럼", "시험용 여행 클럽 입니다.");
// spring에서 bean을 생성하고 bean을 찾아오는 과정
ClubService clubService = context.getBean("clubService", ClubService.class);
String clubId = clubService.registerClub(clubCdo);
String clubId1 = clubService.registerClub(clubCdo1);
System.out.println("club id : " + clubId);
System.out.println("club 1 id : " + clubId1);
Optional<Club> foundedClub = clubService.findClubById(clubId1);
System.out.println("찾은 클럽 정보는 \n" +
" " + foundedClub);
// member service 시험 +++++++++++++++++++++++++++++
MemberCdo mCdo = new MemberCdo("abc@myvms.com", "kim dong", "010-2222-3333", "2005-01-14", "blooming flows");
MemberCdo mCdo1 = new MemberCdo("abcdd@myvms.com", "kim jin", "010-2222-9999", "2005-11-11", "my vms");
MemberService mService = context.getBean("memberService", MemberService.class);
String memberId = mService.registerMember(mCdo);
String memberId1 = mService.registerMember(mCdo1);
Optional<Member> foundedMember = mService.findMemberById(memberId1);
List<Member> foundedMemberName = mService.findByMemberNameContaining("kim");
System.out.println();
System.out.println("member's ID : "+ memberId);
System.out.println("찾은 member info. : \n"+ foundedMember);
System.out.println("findAll : "+mService.findAll());
System.out.println("포함 이름 찾기 : " + foundedMemberName);
}
}