250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- fnmatch
- __getitem__
- shuffle()
- fileinput
- locals()
- MySQL
- __sub__
- shutil
- inplace()
- count()
- discard()
- randrange()
- CSS
- JS
- choice()
- HTML
- __len__
- glob
- __annotations__
- remove()
- zipfile
- 파이썬
- 오버라이딩
- items()
- node.js
- MySqlDB
- View
- Database
- mro()
- decode()
Archives
- Today
- Total
흰둥이는 코드를 짤 때 짖어 (왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!)
(파이썬) DAO, DTO, VO 와 MVC 패턴 본문
728x90
반응형
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를 활용한 단어장 만들기
In [1]:
# DTO 역할의 클래스
class Words:
def __init__(self, eng, kor, lev=1):
self.eng = eng
self.kor = kor
self.lev = lev
def setEng(self, eng):
self.eng = eng
def getEng(self):
return self.eng
def setKor(self, kor):
self.kor = kor
def getKor(self):
return self.kor
def setLev(self, lev):
self.lev = lev
def getLev(self):
return self.lev
def printWord(self):
print(f'단어: {self.eng}, 뜻: {self.kor}, 레벨: {self.lev}')
In [2]:
word = Words('apple', '사과', 1)
In [3]:
word.printWord()
단어: apple, 뜻: 사과, 레벨: 1
In [4]:
# word.lev = 2
word.setLev(2);
In [5]:
word.printWord()
단어: apple, 뜻: 사과, 레벨: 2
In [6]:
# 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)
In [7]:
# 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)
In [8]:
# 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('다시 입력하세요')
In [9]:
start = Menu()
start.run()
1.등록하기 2.출력하기 3.검색하기 4.수정하기 5.삭제하기 6.종료하기1
단어를 입력하세여: apple
뜻을 입력하세여: 사과
레벨을 입력하세요: 1
1.등록하기 2.출력하기 3.검색하기 4.수정하기 5.삭제하기 6.종료하기1
단어를 입력하세여: banana
뜻을 입력하세여: 바나나
레벨을 입력하세요: 1
1.등록하기 2.출력하기 3.검색하기 4.수정하기 5.삭제하기 6.종료하기2
단어: apple, 뜻: 사과, 레벨: 1
단어: banana, 뜻: 바나나, 레벨: 1
1.등록하기 2.출력하기 3.검색하기 4.수정하기 5.삭제하기 6.종료하기1
단어를 입력하세여: avocado
뜻을 입력하세여: 아보카도
레벨을 입력하세요: 2
1.등록하기 2.출력하기 3.검색하기 4.수정하기 5.삭제하기 6.종료하기2
단어: apple, 뜻: 사과, 레벨: 1
단어: banana, 뜻: 바나나, 레벨: 1
단어: avocado, 뜻: 아보카도, 레벨: 2
1.등록하기 2.출력하기 3.검색하기 4.수정하기 5.삭제하기 6.종료하기3
검색할 단어를 입력하세요: banana
단어: banana, 뜻: 바나나, 레벨: 1
1.등록하기 2.출력하기 3.검색하기 4.수정하기 5.삭제하기 6.종료하기4
수정할 단어를 입력하세요: avocado
새로운 뜻을 입력하세요: 아보카도
새로운 레벨을 입력하세요: 3
1.등록하기 2.출력하기 3.검색하기 4.수정하기 5.삭제하기 6.종료하기5
삭제할 단어를 입력하세요: apple
1.등록하기 2.출력하기 3.검색하기 4.수정하기 5.삭제하기 6.종료하기2
단어: banana, 뜻: 바나나, 레벨: 1
단어: avocado, 뜻: 아보카도, 레벨: 3
1.등록하기 2.출력하기 3.검색하기 4.수정하기 5.삭제하기 6.종료하기6
5. MVC 패턴
- 디자인 패턴 중 하나
- M(Model), V(View), C(Controller)의 약자
- 사용자가 view를 통해 controller를 조작하면 controller는 model을 통해 데이터를 가져오고, 그 정보를 통해 시각적인 담당을 하는 view를 다시 제어해서 사용자에게 전달
- Model
- 애플리케이션의 정보, 데이터를 나타냄
- 사용자가 편집하길 원하는 모든 데이터를 가지고 있음
- 뷰나 컨트롤러에 대해서 어떤 정보도 알지 맣아야 함
- 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야함
- View
- 텍스트, 체크박스 등과 같은 사용자 인터페이스 요소를 나타냄
- 모델이 가지고 있는 정보를 따로 저장해서는 안됨
- 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 함
- Controller
- 데이터와 사용자 인터페이스 요소들을 연결하는 다리 역할을 함
- 모델이나 뷰에 대해 알고 있어야 함
- 모델이나 뷰의 변결을 모니터링 해야 함
- 애플리케이션의 메인 로직은 컨트롤러가 담당
✅ 디자인 패턴
- 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용하여 쓸 수 있는 것을 정리한 "규약"을 통해 형태로 만든 것
728x90
반응형
'파이썬 기초' 카테고리의 다른 글
(파이썬) MySQL을 이용한 단어장 만들기 (0) | 2023.03.22 |
---|---|
(파이썬) 파이썬과 MySQL 연동 (0) | 2023.03.22 |
(파이썬) 폴더 관리 프로그램 실습 (0) | 2023.03.14 |
(파이썬) 파일 입출력 라이브러리 (0) | 2023.03.14 |
(파이썬) 변수 타입 어노테이션 (0) | 2023.03.13 |