예를 들어 보자.
export
DB 스키마에 크게 의존 하는 메서드가 있다고 가정 해 봅시다 . “무겁다”는 말은 특정 테이블에 새 열을 추가하는 경우가 많고 (매우 자주) 해당 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
스키마를 기반으로 생성 할 수 있습니까 ?