일부는 SOLID 원칙을 최대한 활용하면 기능적 프로그래밍을하게 된다고 말합니다 . 나는이 기사에 동의하지만 인터페이스 / 객체에서 함수 / 클로저로의 전환에서 일부 의미가 손실된다고 생각하며 함수 프로그래밍이 손실을 완화시키는 방법을 알고 싶습니다.
기사에서 :
또한 ISP (Interface Segregation Principle)를 엄격하게 적용하면 헤더 인터페이스보다 역할 인터페이스를 선호해야합니다.
더 작고 더 작은 인터페이스를 향한 설계를 계속 추진하면 궁극적으로 단일 방법의 인터페이스 인 궁극적 인 역할 인터페이스에 도달하게됩니다. 이것은 나에게 많이 일어난다. 예를 들면 다음과 같습니다.
public interface IMessageQuery
{
string Read(int id);
}
에 의존하는 경우 암시 적 계약의IMessageQuery
일부는 호출 이 주어진 ID를 가진 메시지를 검색하고 반환 한다는 것입니다.Read(id)
이것을 동등한 기능적 서명에 의존하는 것과 비교하십시오 int -> string
. 추가 신호가 없으면이 함수는 간단 할 수 있습니다 ToString()
. 당신이 구현되면 IMessageQuery.Read(int id)
와 ToString()
나는 의도적으로 파괴되는 당신을 비난 할 수있다!
그렇다면 잘 알려진 인터페이스의 의미를 보존하기 위해 기능 프로그래머는 무엇을 할 수 있습니까? 예를 들어, 단일 멤버로 레코드 유형을 작성하는 것이 일반적입니까?
type MessageQuery = {
Read: int -> string
}
Without any additional clues
... 문서가 계약의 일부인 이유 일 수 있습니다 .