python 3 의존 도치 원칙 깊이 분석(예시 코드)
단지 주차 정보 에 대해 서 는 각 회사 가 제공 하 는 주차 데 이 터 를 통합 하여 자사 의 빅 데이터 플랫폼 에 입력 해 야 한다.
데이터 의 입력 은 데이터 에 대한 첨삭 과 수정 이다.
다음은 장안 과 도요 타 에서 온 주차 데 이 터 를 통합 하 는 일반적인 표기 법 입 니 다.
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 의존 도 메 인 원칙 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.