Exagg'itive Summary (TM)
몇 가지를 얻습니다.
- 프로토 타입 상속 및 복제
- 새로운 속성의 동적 추가
- 동일한 클래스의 서로 다른 버전 (사양 수준)의 개체 공존
- 최신 버전 (사양 수준)에 속하는 개체에는 추가 "선택적"속성이 있습니다.
- 오래되고 새로운 속성의 내성
- 유효성 검사 규칙의 내부 검사 (아래에 설명)
한 가지 치명적인 단점이 있습니다.
- 컴파일러는 맞춤법이 틀린 문자열을 확인하지 않습니다.
- 자동 리팩토링 도구는 멋진 키를 지불하지 않으면 속성 키 이름의 이름을 바꾸지 않습니다.
문제는, 음, 내성 검사를 사용하여 내성 검사를 할 수 있다는 것입니다 . 이것은 일반적으로 일어나는 일입니다.
- 반사를 가능하게합니다.
- 큰 내성 라이브러리를 프로젝트에 추가하십시오.
- 속성 또는 주석으로 다양한 객체 메소드 및 속성을 표시하십시오.
- 내성 라이브러리가 마법을 발휘하게하십시오.
다시 말해, FP와 인터페이스 할 필요가 없다면 Rich Hickey의 조언을 따를 필요가 없습니다.
String
속성 키로 사용하는 것이 가장 간단 하지만 s 를 사용할 필요는 없습니다 String
. Android ™를 포함한 많은 레거시 시스템은 전체 프레임 워크에서 정수 ID를 광범위하게 사용하여 클래스, 속성, 리소스 등을 나타냅니다.
Android는 Google Inc.의 상표입니다.
두 세상 모두 행복하게 만들 수도 있습니다.
Java 세계의 경우 평소와 같이 getter 및 setter를 구현하십시오.
FP 세계의 경우
Object getPropertyByName(String name)
void setPropertyByName(String name, Object value) throws IllegalPropertyChangeException
List<String> getPropertyNames()
Class<?> getPropertyValueClass(String name)
이 기능에는 못생긴 코드가 있지만 코드를 읽는 스마트 플러그인을 사용하여 IDE 플러그인이 있습니다.
사물의 Java 측면은 평소와 같이 성능이 뛰어납니다. 그들은 코드의 그 추악한 부분 을 사용하지 않을 것 입니다 . Javadoc에서 숨길 수도 있습니다.
세계의 FP 측은 원하는 "간단한"코드를 작성할 수 있으며 일반적으로 코드가 느리다는 소리를 내지 않습니다.
일반적으로 소프트웨어 개발에서 객체 대신 맵 (프로퍼티 백)을 사용하는 것이 일반적입니다. 함수형 프로그래밍이나 특정 유형의 언어에는 고유하지 않습니다. 주어진 언어에 대한 관용적 접근 방식은 아니지만 그것을 요구하는 상황이 있습니다.
특히, 직렬화 / 역 직렬화에는 종종 유사한 기술이 필요합니다.
"map as object"에 관한 일반적인 생각.
- 여전히 "객체와 같은 맵"을 검증하는 기능을 제공해야합니다. 차이점은 "객체로 매핑"을 통해보다 유연하고 (제한이 적은) 검증 기준을 허용한다는 것입니다.
- "개체로 매핑"에 추가 필드를 쉽게 추가 할 수 있습니다.
- 유효한 객체의 최소 요구 사항을 지정하려면 다음을 수행해야합니다.
- 맵에 예상되는 "최소 필요한"키 세트를 나열하십시오.
- 값을 검증해야하는 각 키에 대해 값 검증 기능을 제공하십시오.
- 여러 키 값을 확인해야하는 유효성 검사 규칙이있는 경우 해당 규칙도 제공하십시오.
- 장점은 무엇입니까? 이 방법으로 사양을 제공하는 것은 내성적입니다. 최소한의 필수 키 집합을 쿼리하고 각 키에 대한 유효성 검사 기능을 얻는 프로그램을 작성할 수 있습니다.
- OOP에서, 이들 모두는 "캡슐화"라는 이름으로 블랙 박스에 롤업됩니다. 기계가 읽을 수있는 유효성 검사 논리 대신 호출자는 사람이 읽을 수있는 "API 설명서"만 읽을 수 있습니다 (다행히 존재하는 경우).