예를 들어 보자.
exportDB 스키마에 크게 의존 하는 메서드가 있다고 가정 해 봅시다 . “무겁다”는 말은 특정 테이블에 새 열을 추가하는 경우가 많고 (매우 자주) 해당 export메소드가 변경됨 을 나타냅니다 (보통 내보내기 데이터에도 새 필드를 추가해야 함).
프로그래머는 종종이 export방법 을 변경 해야한다는 것을 확실하지 않기 때문에 방법 을 변경 하는 것을 잊어 버립니다 . 내 목표는 프로그래머 가 메소드 를 보는 것을 잊었는지 또는 내보내기 데이터에 필드를 추가하고 싶지 않은지를 결정하도록 명시 적으로 결정하도록하는 것 export입니다. 그리고이 문제에 대한 디자인 솔루션을 찾고 있습니다.
두 가지 아이디어가 있지만 둘 다 결함이 있습니다.
스마트 한 "모두 읽기"래퍼
모든 데이터를 명시 적으로 읽도록하는 스마트 래퍼를 만들 수 있습니다.
이 같은:
def export():
checker = AllReadChecker.new(table_row)
name = checker.get('name')
surname = checker.get('surname')
checker.ignore('age') # explicitly ignore the "age" field
result = [name, surname] # or whatever
checker.check_now() # check all is read
return result
따라서 읽지 않은 다른 필드가 포함되어 checker있는지 확인 table_row합니다. 그러나이 모든 것은 무겁게 보이고 성능에 영향을 줄 수 있습니다.
“ 그 방법을 확인하십시오 ”unittest
마지막 테이블 스키마를 기억하고 테이블이 변경 될 때마다 실패하는 unittest를 만들 수 있습니다. 이 경우 프로그래머는 " export방법 을 확인하는 것을 잊지 마십시오"와 같은 것을 보게 될 것 입니다. 경고 프로그래머를 숨기려면 새로운 필드를 추가하여 테스트를 수동으로 체크 아웃 export하고 수동으로 (다른 문제) 해결하십시오.
다른 아이디어가 있지만 구현하기가 너무 어렵거나 이해하기가 어렵습니다 (프로젝트가 퍼즐이되기를 원하지 않습니다).
위의 문제는 때때로 발생하는 더 광범위한 종류의 문제의 예일뿐입니다. 일부 코드 및 / 또는 인프라를 바인딩하려고하므로이 중 하나를 변경하면 즉시 프로그래머에게 다른 코드를 확인하라는 경고가 표시됩니다. 일반적으로 일반적인 논리 추출 또는 안정적인 단위 테스트 작성과 같은 간단한 도구가 있지만 더 복잡한 경우를위한 도구를 찾고 있습니다.
export현실적으로 필요한 모든 것이 있는지 확인하는 테스트를 자동 생성 할 수 있습니까 ?
export스키마를 기반으로 생성 할 수 있습니까 ?