728x90
목차
1. 파이썬의 DAO
2. 파이썬의 DTO
3. 파이썬의 VO
4. 파이썬의 DAO,DTO,VO를 이용한 단어장만들기
5. 파이썬의 MVC 패턴
26.DAO,DTO,VO.ipynb
1.DAO(Data Access Object)
- DataBase의 data에 접근하기 위해 객체로 직접 데이터베이스에 접근하여 데이터를 삽입, 조회, 변경, 삭제등을 조작할 수 있는기능
- 데이터베이스 접근을 하기 위한 로직과 비즈니스로직을 분리하기 위해 사용
✔ 비즈니스 로직
- 업무에 필요한 데이터처리를 수행하는 응용프로그램의 일부
- 데이터의 입력, 수정, 조회, 삭제 및 처리 등을 수행하는 각종 처리를 의미한다.
- 유저의 눈에는 보이지 않지만, 유저가 원하는 행위를 잘 전달하기 위해 짜여진 코드 로직
2.DTO(Date Transfer Object)
- 데이터 전송(이동) 객체라는 의미
- 로직을 가지지 않고 순순한 데이터 객체이며, getter/setter 메소드만 가진 클래스를 의미한다.
3.VO(Value Object)
- Read-Only 속성을 가진 오브젝트
- DTO와 유사하지만 VO는 setter를 가지고 있지 않아 값을 변경할 수 없음
- DTO는 인스턴스 개념이라면 VO는 Layer 개념
- DTO는 Layer간의 통신 용도로 사용하는 객체이며, VO는 특정한 비즈니스 로직의 값을 담는 객체
4. 파이썬의 DAO,DTO,VO를 이용한 단어장만들기
- DTO역할의 클래스 (입력받은 값을 받고 밖으로 내주는 클래스)
# DTO 역의 클래스 (입력받고 내어줄수 있기 때문에)
class Words:
def __init__(self, eng, kor, lev = 1): # eng, kor, lev를 생성자로 처음 객체 생성시 입력 받는다 lev는 디폴트값 1이다.
self.eng = eng
self.kor = kor
self.lev = lev
def setEng(self, eng): # eng값을 입력 받음
self.eng = eng
def getEng(self): # 입력받은 eng를 밖으로 내어줌
return self.eng
def setKor(self, kor): # kor값을 입력 받음
self.kor = kor
def getKor(self): # 입력받은 kor를 밖으로 내어줌
return self.kor
def setLev(self, lev): # lev값을 입력 받음
self.lev = lev
def getLev(self): # 입력받은 lev를 밖으로 내어줌
return self.lev
def printWord(self): # 입력 받은 단어의 정보를 프린트 해줍니다.
print(f'단어: {self.eng}, 뜻: {self.kor}, 레벨: {self.lev}')
- DAO역할을 하는 클래스 (실질적으로 뭔가 연산(동작)이 일어나는 클래스
- DAO와 Service
#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 i
def selectAll(self): # 현재 저장되어있는 모든 단어를 출력 해주는 함수
return self.datas
def delete(self, word): # 입력 받은 객체를 삭제 해주는 함수
self.datas.remove(word)
- service 클래스
from ast import Delete
#실제 동작을 해주는 서비스단
#Service를 담당하는 클래스
class WordService:
def __init__(self):
self.dao = WordsDao() # 위의 DAO를 불러온다.(위에 생성해놓은 기능을 사용하기 위해서)
def insertWord(self): #1. 단어를 입력 받는것을 클라이언트에게 실질적으로 보여주는 함수
eng = input('단어를 입력하세요.')
kor = input('뜻를 입력하세요.')
lev = input('레벨를 입력하세요.')
word = Words(eng, kor, lev) # 입력받은 eng,kor,lev 값을 DTO범위로 보내주고 리턴 받은 값을 word변수에 저장한다.
self.dao.insert(word) # DTO에서 받은 값(word변수의값)을 동작해줄 DAO로 보냄 연산 또는 동작은 DAO클래스에 진행한다.
def printAll(self): # 2. 출력 해주는 함수
datas = self.dao.selectAll() # DAO에서 datas의 내용을 return 받아 datas의 변수에 담는다.
for i in datas: # 입력 받은 datas의 리스트를 이용하여 for문을 사용
i.printWord() # DTO의 생성해둔 형태에 맞게 출력 해줍니다.
def searchWord(self): # 3. 단어를 찾는 함수
eng = input('검색할 단어를 입력하세요.')
word = self.dao.search(eng) # 입력 받은 eng단어를 DAO의 search로 보내 값을 비교하고 return 받아 word에 저장한다.
if word == None: # 단어가 없으면 내용출력
print('찾는 단어가 없습니다. ')
else: # 단어가 있다면,
word.printWord() # DAO의 search로 보낸값을 DTO의 생성해둔 형태에 맞게 출력
def editWord(self): # 4. 단어를 수정할 함수
eng = input('수정할 단어를 입력하세요.')
word = self.dao.search(eng) # 입력받은 eng단어를 DAO가 동작해 찾아주고 word에 반환값을 저장한다.
if word == None: # 단어가 없으면 내용출력
print('수정할 단어를 찾지 못했습니다. ')
else:
kor = input('새로운 뜻을 입력하세요.')
lev = input('새로운 레벨을 입력하세요.')
word = Words(eng,kor,lev) # 수정할 단어가 존재할 경우 다시 DTO의 객체 생성 해주고 그값을 word에 저장합니다.
self.dao.update(word) # DTO에서 반환 받은 값을 DAO의 update로 보내 내용 수정을 동작해줍니다.
def delWord(self): # 5. 단어를 삭제할 함수
eng = input('삭제할 단어를 입력하세요.')
word = self.dao.search(eng) # 입력받은 eng단어를 DAO가 동작해 찾아주고 word에 반환값을 저장한다.
if word == None: # 단어가 없으면 내용출력
print('찾는 단어가 없습니다. ')
else:
self.dao.delete(word) # DTO에서 반환 받은 값을 DAO의 Delete로 보내 내용 삭제를 동작해줍니다.
- View 역할을 하는 클래스( 메뉴를 선택하여 메뉴에 맞는 service를 실행해준다.)
# view 역할을 하는 클래스
class Menu:
def __init__(self):
self.service = WordService()
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)
- 데이터와 사용자 인터페이스 요소들을 연결하는 다리 역할을 합니다.
- 모델이나 뷰에 대해 알고 있어야 한다.
- 전체인 계산을 해야 하기때문에 모델과 뷰를 알고 있어야한다.
- 모델이나 뷰의 변경을 모니터링 해야 한다.
- 애플리케이션의 메인 로직은 컨트롤러가 담당하게 됩니다.
✔디자인 패턴
- 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용하여 쓸 수 있는 것을 정리한 "규약"을 통해 형태로 만든것
728x90
'개발 > 파이썬' 카테고리의 다른 글
2023.04.12 파이썬의 재귀호출 (0) | 2023.04.12 |
---|---|
23.03.22파이썬 mysqlclient (0) | 2023.03.22 |
23.03.14파이썬의 폴더 관리 프로그램 (0) | 2023.03.15 |
23.03.14파이썬의 파일 입출력 라이브러리 (0) | 2023.03.15 |
23.03.13파이썬의 변수타입 어노테이션 (1) | 2023.03.13 |
댓글