VO(Value object) 또는 DTO(Data Trangfer Object)

데이터를 교환하는 객체

계층간 데이터 교환을 위해 사용하는 객체

DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체

 

 

DAO(Database Access object)

데이터에 접근하는 객체

DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트.

DB를 대신하여 리스트 사용할 수도 있다.

 

SELECT/INSERT/UPDATE/DELETE 등 데이터 처리가 주 목적

 

 

Service(비즈니스 로직 구현) 

사용자에 제공할 기능을 구현하는 클래스

 

DAO와 Service가 비슷한 기능으로 보이지만 DAO는 CRUD작업을 하나씩 분할해 놓은 것이다.'

사용자가 글을 작성하거나 수정하는 것과 동시에 페이지가 이동한다면 update, select가 작동하기 때문에

여러 dao를 service안에 조립하는 로직을 갖게된다.

 

 

그럼 예제를 하나 다뤄보자.

이름, 전화, 주소를 저장하는 주소록을 만들어보자.

#이름, 전화, 주소
#VO(Value object) / DTO(Data Trangfer Object)
class Member:
    def __init__(self, name='', tel='', address=''):
        self.name = name
        self.tel = tel
        self.address = address

    def printMember(self):
        print('name:' , self.name)
        print('tel:' , self.tel)
        print('address:' , self.address)
        print()

#DAO(Database Access object)
class MemDao:   #저장소 관련 작업만 담당
    def __init__(self):
        self.datas = []

    def insert(self, m):
        self.datas.append(m)

    def select(self, name):
        for i in self.datas:
            if i.name == name:
                return  i   #검색된 객체의 참조값 반환. 객체에 다이렉트로 접근

    def selectAll(self):
        return self.datas

    #def update(self,m):   #수정할사람의 이름, 새전화, 새주소

    def delete(self,m):
        self.datas.remove(m)

#Service
class MemService:
    def __init__(self):
        self.dao = MemDao()

    def addMember(self):
        name = input('name:')
        tel = input('tel:')
        address = input('adress:')
        m = Member(name, tel, address)
        self.dao.insert(m)

    def printMember(self):
        name = input('search name:')
        m = self.dao.select(name)
        if m == None:
            print('없는 이름')
        else:
            m.printMember()

    def printAll(self):
        datas = self.dao.selectAll()
        for i in datas:
            i.printMember()

    def editMember(self):
        name = input('수정할 사람 이름:')
        m = self.dao.select(name)
        if m == None:
            print('없는 이름')

        else:
            m.tel = input('new tel:')
            m.address = input('new address:')

    def delMember(self):
        name = input('삭제할 사람 이름:')
        m = self.dao.select(name)
        if m == None:
            print('없는 이름')
        else:
            self.dao.delete(m)

class Menu:
    def __init__(self):
        self.service = MemService()

    def run(self):
        while True:
            menu=int(input('1.등록 2.검색 3.수정 4.삭제 5.전체출력 6.종료'))
            if menu == 1:
                self.service.addMember()
            if menu == 2:
                self.service.printMember()
            if menu == 3:
                self.service.editMember()
            if menu == 4:
                self.service.delMember()
            if menu == 5:
                self.service.printAll()
            if menu == 6:
                break


def main():
    m= Menu()
    m.run()

main()

 

+ Recent posts