python 3 의존 도치 원칙 깊이 분석(예시 코드)

5963 단어 python의존 도치
장면
단지 주차 정보 에 대해 서 는 각 회사 가 제공 하 는 주차 데 이 터 를 통합 하여 자사 의 빅 데이터 플랫폼 에 입력 해 야 한다.
데이터 의 입력 은 데이터 에 대한 첨삭 과 수정 이다.
다음은 장안 과 도요 타 에서 온 주차 데 이 터 를 통합 하 는 일반적인 표기 법 입 니 다.

class Changan(object):
    def __init__(self):
        self.type = 'changan'

    def ca_add(self):
        print('%s   ' % self.type)

    def ca_del(self):
        print('%s   ' % self.type)

    def ca_modify(self):
        print('%s   ' % self.type)
        
    def ca_get(self):
        print('%s   ' % self.type)


class Toyota(object):
    def __init__(self):
        self.type = 'fengtian'

    def tyt_add(self):
        print('%s   ' % self.type)

    def tyt_del(self):
        print('%s   ' % self.type)

    def tyt_modify(self):
        print('%s   ' % self.type)

    def tyt_get(self):
        print('%s   ' % self.type)

class Data(object):

    def __init__(self, car):
        self.car = car

    def data_add(self):
        if self.car.type == 'changan':
            self.car.ca_add()
        else:
            self.car.tyt_add()

    def data_del(self):
        if self.car.type == 'changan':
            self.car.ca_del()
        else:
            self.car.tyt_del()

    def data_mofify(self):
        if self.car.type == 'changan':
            self.car.ca_modify()
        else:
            self.car.tyt_modify()

    def data_get(self):
        if self.car.type == 'changan':
            self.car.ca_get()
        else:
            self.car.tyt_get()

if __name__ == '__main__':
    ca = Changan()
    tyt = Toyota()
    autosystem = Data(ca)
    autosystem.data_add()
    autosystem.data_del()
    autosystem.data_modify()
    autosystem.data_get()
    autosystem.car = tyt
    print('*' * 50)
    autosystem.data_add()
    autosystem.data_del()
    autosystem.data_modify()
    autosystem.data_get()
실행 결 과 는 다음 과 같다.
신규
changan 삭제
changan 수정
검색
**************************************************
fengtian 추가
fengtian 삭제
fengtian 수정
fengtian 조회
마지막 으로 볼 수 있 는 Data 류 는 간단 한 공장 입 니 다.절 차 를 대상 으로 데 이 터 를 삭제 하고 검 사 를 합 니 다.상층 의 Data 류 는 하층 의 Changan 류 와 Toyota 류 에 의존 해 야 합 니 다.미래 Changan 류 와 Toyota 류 가 수요 변경 으로 인해 실현 방식 이 바 뀌 었 다 고 가정 하면 Data 류 도 이에 따라 바 뀌 거나 미래 에 또 새로운 업 체 인 스 즈 키 Suzuki 가 올 것 입 니 다.그럼 Data 에 if else 를 많이 써 야 돼 요.이런 변경 은 프로그래머 에 게 치 명 적 이 고 매번 변동 할 때마다 변경 해 야 할 부분 이 많아 문제 가 생 긴 다.
어떻게 해결 합 니까?
의존 도치 원칙 에 따라
"프로그램 은 추상 적 인 인터페이스 에 의존 해 야 지 구체 적 인 실현 에 의존 해 서 는 안 된다."
changan,toyota 와 같은 공공 성 을 통 해 데 이 터 를 처리 하 는 방법 을 인 터 페 이 스 를 통 해 추상 화 합 니 다.

import abc

class DataProcessing(metaclass=abc.ABCMeta):
    """
       
          
    """
    @abc.abstractmethod
    def data_add(self, *args, **kwargs):
        pass

    @abc.abstractmethod
    def data_del(self, *args, **kwargs):
        pass

    @abc.abstractmethod
    def data_modify(self, *args, **kwargs):
        pass

    @abc.abstractmethod
    def data_get(self, *args, **kwargs):
        pass

class Changan(DataProcessing):
    def __init__(self):
        self.type = 'changan'

    def data_add(self):
        print('%s   ' % self.type)

    def data_del(self):
        print('%s   ' % self.type)

    def data_modify(self):
        print('%s   ' % self.type)
        
    def data_get(self):
        print('%s   ' % self.type)

class Toyota(DataProcessing):
    def __init__(self):
        self.type = 'fengtian'

    def data_add(self):
        print('%s   ' % self.type)

    def data_del(self):
        print('%s   ' % self.type)

    def data_modify(self):
        print('%s   ' % self.type)

    def data_get(self):
        print('%s   ' % self.type)

class Data(object):

    def __init__(self, car):
        self.car = car

    def data_add(self):
        self.car.data_add()

    def data_del(self):
        self.car.data_del()

    def data_modify(self):
        self.car.data_modify()

    def data_get(self):
        self.car.data_get()

if __name__ == '__main__':
    ca = Changan()
    tyt = Toyota()
    autosystem = Data(ca)
    autosystem.data_add()
    autosystem.data_del()
    autosystem.data_modify()
    autosystem.data_get()
    autosystem.car = tyt
    print('*' * 50)
    autosystem.data_add()
    autosystem.data_del()
    autosystem.data_modify()
    autosystem.data_get()
실행 후 결 과 는 여전히
신규
changan 삭제
changan 수정
검색
**************************************************
fengtian 추가
fengtian 삭제
fengtian 수정
fengtian 조회
이 를 통 해 알 수 있 듯 이 삭제 와 검 사 는 DataProcessing 의 방법 으로 추상 화 되 었 습 니 다.앞으로 Changan 류 와 Toyota 류 가 어떻게 변동 하 든 Suzuki 류 를 추가 해 야 합 니 다.상층 의 Data 류 는 바 꾸 지 않 아 도 됩 니 다.if name=='main'후 클 라 이언 트 의 호출 도 어떻게 바 꾸 지 않 아 도 되 고 코드 차원 도 더욱 뚜렷 하 며 후속 적 인 확장 에 편리 합 니 다.
python 3 의존 도 메 인 원칙 예제 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 python 의존 도 메 인 원칙 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기