-
(26)Python_DAO, DTO, VOPython 2023. 3. 21. 23:49728x90
1. DAO(Data Access Object)
- DataBase의 data에 접근하기 위한 객체로 직접 DataBase에 접근하여 데이터를 삽입, 조회, 변경, 삭제등을 조작할 수 있는 기능
- DataBase 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용
✔ 비즈니스 로직
- 업무에 필요한 데이터처리를 수행하는 응용프로그램의 일부
- 데이터의 입력, 수정, 조회, 삭제 및 처리 등을 수행하는 각종 처리를 의미
- 유저의 눈에는 보이지 않지만, 유저가 원하는 행위를 잘 전달하기 위해 짜여진 코드 로직
2. DTO(Data transfer Object)
- 데이터 전송(이동) 객체라는 의미
- 로직을 가지지 않는 순수한 데이터 객체이며 getter/setter 메소드만 가진 클래스를 의미
3. VO(Value Object)
- Read-Only 속성을 가진 오브젝트
- DTO와 유사하지만 VO는 setter를 가지고 있지 않아 값을 변경할 수 없음
- DTO는 인스턴스 개념이라면 VO는 리터럴 개념
- DTO는 Layer 간의 통신 용도로 사용하는 객체이며, VO는 특정한 비즈니스 로직의 값을 담는 객체
4. DAO, DTO를 활용한 영어 단어장 만들기
# DTO 역할의 클래스class Words:def __init__(self,eng ,kor,lev = 1):self.eng = engself.kor = korself.lev = lev
def setEng(self,eng):self.eng = engdef getEng(self):return self.eng
def setKor(self,kor):self.kor = kordef getKor(self):return self.kor
def setLev(self,lev):self.lev = levdef getLev(self):return self.lev
def printWord(self):print(f'단어: {self.eng}, 뜻: {self.kor}, 레벨: {self.lev}')# DAO 역할의 클래스class WordsDao:def __init__(self):self.datas = []
def insert(self,word):self.datas.append(word)def update(self,word):for i in self.datas:if i.getEng() == word.getEng(): # 기존의 저장된 단어와 수정할 단어가 같다면i.setKor(word.getKor()) # 기존의 저장된 뜻에 수정할 단어의 뜻을 설정i.setLev(word.getLev())
def search(self,eng):for i in self.datas:if i.getEng() == eng:return idef selectAll(self):return self.datas
def delete(self,word):self.datas.remove(word)# Service를 담당하는 클래스class WordsService:def __init__(self):self.dao = WordsDao()
def insertWord(self):eng = input('단어를 입력하세요: ')kor = input('뜻을 입력하세요: ')lev = input('레벨을 입력하세요: ')word = Words(eng,kor,lev)self.dao.insert(word)
def printAll(self):datas = self.dao.selectAll()for i in datas:i.printWord()
def searchWord(self):eng = input('검색할 단어를 입력하세요: ')word = self.dao.search(eng)if word == None:print('찾는 단어가 없습니다.')else:word.printWord()
def editWord(self):eng = input('수정할 단어를 입력하세요: ')word = self.dao.search(eng)if word == None:print('수정할 단어를 찾지 못했습니다.')else:kor = input('새로운 뜻을 입력하세요: ')lev = input('새로운 레벨을 입력하세요: ')word = Words(eng,kor,lev)self.dao.update(word)
def delWord(self):eng = input('삭제할 단어를 입력하세요: ')word = self.dao.search(eng)if word == None:print('삭제할 단어를 찾지 못했습니다.')else:self.dao.delete(word)# View 역할을 하는 클래스class Menu:def __init__(self):self.service = WordsService()
def run(self):while True:try:menu = int(input('1. 등록하기 2. 출력하기 3.검색하기 4. 수정하기 5.삭제하기 6. 종료하기: '))if menu == 1:self.service.insertWord()
elif menu == 2:self.service.printAll()
elif menu == 3:self.service.searchWord()
elif menu == 4:self.service.editWord()
elif menu == 5:self.service.delWord()
elif menu == 6:break
except:print('다시 입력하세요')출력
start = Menu()start.run()5. MVC 패턴
- 디자인 패턴 중 하나
- M(Model), V(View), C(Controller)의 약자
- 사용자가 view를 통해 controller를 조작하면 controller는 model을 통해 데이토를 가져오고, 그 정보를 통해 시각적인 담당을 하는 view를 다시 제어해서 사용자에게 전달됨
- Model
- 애플리케이션의 정보, 데이터를 나타냄
- 사용자가 편집하길 원하는 모든 데이터를 가지고 있음
- 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 함
- 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야 함
- View
- 텍스트, 체크박스 등과 같은 사용자 인터페이스 요소를 나타냄
- 모델이 가지고 있는 정보를 따로 저장해서는 안됨
- 모델이나 컨트롤러와 같이 구성요소들을 몰라야 함
- Controller
- 데이터와 사용자 인터페이스 요소들을 연결하는 다리 역할을 함
- 모델이나 뷰에 대해 알고 있어야 함
- 모델이나 뷰의 변경을 모니터링 해야 함
- 애플리케이션의 메인 로직은 컨트롤러가 담당
✔ 디자인 패턴
- 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용하여 쓸 수 있는 것을 정리한 "규약"을 통해 형태로 만든 것
'Python' 카테고리의 다른 글
(28)Python_DB를 이용한 단어장 만들기 (2) 2023.03.23 (27)Python_파이썬과 MySQL연동 (0) 2023.03.22 (25)Python_폴더 관리 프로그램 실습 (0) 2023.03.14 (24)Python_파일 입출력 라이브러리 (0) 2023.03.14 (23)Python_변수의 타입 어노테이션 (0) 2023.03.13