SOLID에 따르면 인터페이스를 작성해야 할뿐만 아니라 다른 파일에 있어야 할뿐만 아니라 다른 어셈블리에 있어야합니다.
왜? 어셈블리로 컴파일되는 소스 파일을 변경하려면 어셈블리를 다시 컴파일해야하며 어셈블리를 변경하려면 종속 어셈블리를 다시 컴파일해야합니다. 따라서 SOLID를 기반으로하는 목표가 구현 A를 구현 B로 대체 할 수있는 경우 클래스 C가 인터페이스 I에 의존하지 않아도 차이점을 알 필요는 없지만 어셈블리를 I로 확인해야합니다. 변경되지 않으므로 사용법을 보호합니다.
"그러나 그것은 단지 재 컴파일 일뿐입니다." 스마트 폰 앱에있을 수도 있지만 사용자의 데이터 대역폭에서 더 쉽습니다. 변경된 바이너리 하나를 다운로드하거나 해당 바이너리와 그에 의존하는 코드로 바이너리를 5 개 다운로드합니까? LAN상의 데스크탑 컴퓨터가 모든 프로그램을 사용하도록 작성된 것은 아닙니다. 대역폭과 메모리가 저렴한 경우에도 작은 패치 릴리스는 Active Directory 또는 유사한 도메인 관리 계층을 통해 전체 LAN으로 푸시하는 것이 쉽지 않기 때문에 작은 패치 릴리스는 가치가 있습니다. 사용자는 다음에 로그인 할 때 몇 분이 아닌 몇 분만 적용되어 전체를 다시 설치할 수 있습니다. 말할 것도없이, 프로젝트를 빌드 할 때 다시 컴파일해야하는 어셈블리 수가 적을수록 더 빠르게 빌드됩니다.
면책 조항 : 항상 가능하지는 않습니다. 가장 쉬운 방법은 중앙 집중식 "인터페이스"프로젝트를 만드는 것입니다. 여기에는 단점이 있습니다. 인터페이스 프로젝트와 구현 프로젝트는 퍼시스턴스 레이어 나 앱의 다른 주요 컴포넌트를 재사용하는 다른 앱에서 참조되어야하기 때문에 코드 재사용 성이 떨어집니다. 인터페이스를 더 밀접하게 결합 된 어셈블리로 분할하여이 문제를 극복 할 수 있지만 앱에 더 많은 프로젝트가있어 전체 빌드가 매우 어려워집니다. 핵심은 균형과 느슨하게 결합 된 디자인을 유지하는 것입니다. 일반적으로 필요에 따라 파일을 이동할 수 있으므로 클래스에 많은 변경이 필요하거나 인터페이스의 새로운 구현이 정기적으로 필요할 것입니다 (아마도 새로 지원되는 다른 버전의 소프트웨어와 인터페이스하는 경우)