마인드 맵 갤러리 소프트웨어 프레임워크 디자인의 예술
우리가 소프트웨어 프레임워크 디자인 기술에 대한 지식을 다른 사람들에게 전하고 싶을 때, 그들이 우리와 비슷한 경험이 없기 때문에 그들이 우리의 지식을 받아들이도록 설득하기 어려울 것입니다.
2024-04-10 17:25:12에 편집됨인적 자원 비용 통제는 기업이 경제적 이익을 극대화하는 중요한 수단입니다. 기업은 문제에 대처하기 위해 핵심 경쟁력을 지속적으로 향상시켜야 합니다.
이것은 교육 기술에 대한 지침이 아니라 교육 분위기를 찾는 여정입니다. 독자 여러분, 이 책에서는 각 교육 이야기를 통해 진정한 교육자가 어떤 사람이어야 하는지를 알 수 있습니다. 예민하고 재치 있고, 아이들에게 적절한 것과 부적절한 것이 무엇인지 알고, 무엇을 말해야 할지, 무엇을 말하지 말아야 할지, 주의를 기울이십시오. 아이의 독특함에 주목하고, 아이의 개인 생활 세계에 관심을 기울이고, 아이의 말을 "보고" "듣는" 방법을 알아야 합니다. 참된 교육자만이 아이들의 마음을 이해하고, 준교육의 분위기를 조성하며, 교육과 성장을 더욱 아름답고 보람있게 만들 수 있습니다!
이 책에서 저자는 세부 사항을 벗겨내고 대부분의 사람들이 지식과 기술을 배우는 데 적합한 일련의 학습 방법을 요약합니다. 저자에 따르면 모든 학습은 정밀 입력, 심층 소화, 다중 출력의 세 단계로 나눌 수 있습니다. 첫 번째는 지식의 입력으로, 먼저 새로운 지식을 받아들이고, 그 다음 지식을 소화하고, 입력된 지식을 이해하고, 마지막으로 학습된 지식을 사용하는 것을 의미합니다. 이 책이 학습할 때 혼란스럽거나 새로운 기술을 배우는 방법을 모르는 모든 사람에게 도움이 되기를 바랍니다!
인적 자원 비용 통제는 기업이 경제적 이익을 극대화하는 중요한 수단입니다. 기업은 문제에 대처하기 위해 핵심 경쟁력을 지속적으로 향상시켜야 합니다.
이것은 교육 기술에 대한 지침이 아니라 교육 분위기를 찾는 여정입니다. 독자 여러분, 이 책에서는 각 교육 이야기를 통해 진정한 교육자가 어떤 사람이어야 하는지를 알 수 있습니다. 예민하고 재치 있고, 아이들에게 적절한 것과 부적절한 것이 무엇인지 알고, 무엇을 말해야 할지, 무엇을 말하지 말아야 할지, 주의를 기울이십시오. 아이의 독특함에 주목하고, 아이의 개인 생활 세계에 관심을 기울이고, 아이의 말을 "보고" "듣는" 방법을 알아야 합니다. 참된 교육자만이 아이들의 마음을 이해하고, 준교육의 분위기를 조성하며, 교육과 성장을 더욱 아름답고 보람있게 만들 수 있습니다!
이 책에서 저자는 세부 사항을 벗겨내고 대부분의 사람들이 지식과 기술을 배우는 데 적합한 일련의 학습 방법을 요약합니다. 저자에 따르면 모든 학습은 정밀 입력, 심층 소화, 다중 출력의 세 단계로 나눌 수 있습니다. 첫 번째는 지식의 입력으로, 먼저 새로운 지식을 받아들이고, 그 다음 지식을 소화하고, 입력된 지식을 이해하고, 마지막으로 학습된 지식을 사용하는 것을 의미합니다. 이 책이 학습할 때 혼란스럽거나 새로운 기술을 배우는 방법을 모르는 모든 사람에게 도움이 되기를 바랍니다!
소프트웨어 프레임워크 디자인의 예술
머리말
"API가 공개되면 우리의 영원한 공존이 촉진될 것입니다."
우리가 다른 사람들에게 지식을 전하고 싶을 때, 그들이 우리와 비슷한 경험이 없기 때문에 그들이 우리의 지식을 받아들이도록 설득하기가 어려울 것입니다.
이론과 이유
"예술" 또는 "공학"
API의 중요한 고유성: 일관성
그룹 내 일관성은 어떻게 유지되나요?
완벽한 팀워크
비전을 공유하다
공개 용어
P2 1년 후, 나는 이 추측을 확인했다. Netbeans는 오픈소스 프로젝트이기 때문에 외부 개발자의 관심을 끄는 API가 있습니다. 처음에는 이 외부 코드 기여자가 주로 일부 버그 수정 작업을 수행했습니다. 이후에는 하위 프로젝트를 단독으로 담당하고 관련 API를 설계하기 시작했습니다. 원래 이 API를 설계한 사람은 이 하위 프로젝트의 API가 점점 나빠지는 것을 발견했지만 이유를 찾을 수 없었고 제가 도움을 줄 수 있기를 바랐다고 말했습니다. 그는 이렇게 말했습니다. 그는 이러한 새로운 API를 별로 좋아하지 않으며 자신이 담당하는 프로젝트에 API를 통합하고 싶지도 않습니다. 그러나 그는 또한 이러한 새로운 API에 문제가 무엇인지 알 수 없었습니다. 마지막으로 그는 이러한 새로운 API가 자신의 원래 비전과 일치하지 않는 것 같다고 말했습니다. 나도 그와 비슷한 말을 한 적이 있다. 내 기준으로는 그가 작성한 API가 NetBeans의 API 아이디어와 일치하지 않습니다!
방법론
이성론
경험주의
무 감정
얕은 이해
어떤 것을 이해하는 정도는 그것을 사용하는 방법을 아는 것으로 제한됩니다.
깊은 이해
어떤 것의 이면에 숨어 있는 원리와 법칙을 파악하세요.
대부분의 경우 "얕은 이해"만으로 충분합니다.
선택적 우둔함
일부 콘텐츠에는 심층적인 이해가 필요합니다.
스레드 없는 애플리케이션 개발 원칙
통합을 최종적으로 담당하는 관련 인력이 시스템을 깊이 이해하지 않고도 통합을 잘 할 수 있도록 해주세요.
대상: 사람
API 품질 평가 기준
왜?
우리는 대형 빌딩 블록을 "스레드 없이" 애플리케이션에 조립할 수 있기를 원합니다.
무엇?
메서드, 클래스, 필드 서명
파일(유닉스 파이프)
환경 변수 및 명령줄 옵션
텍스트 정보(toString)
규약
행동
호환성을 판단하는 가장 중요한 방법은 "정상 작동"이지만 이는 특정 내부 구현에 따라 결정됩니다.
null 반환 값
세계화
…
품질
이해 가능성
디자이너와 개발자의 소통을 위한 통로
예시의 중요성
일관성
학습 곡선을 낮추세요
호환성을 유지하다
시계
필요한 솔루션을 찾을 수 있는 "포털" 제공
실제 또는 예상되는 목표와 작업을 기반으로 함
사용자는 특정 클래스에 관심이 없습니다.
간단한 작업에는 간단한 솔루션이 있어야 합니다.
일반 사용자
확장 사용자
투자를 보호하다
사용자에 대해 더 생각해 보세요
목표 변경
이전 버전과 호환 가능
소스 코드 호환
바이너리 호환
기능적으로 호환 가능
놓치기 쉬운
태도, '좋은 상사'는 고객에게 불평하지 않는다
사용 사례 방향의 중요성
예
나는 무엇을 해야 합니까?
장면
이걸 먼저 하고 그다음에 해야지
API 설계 검토(우수한 API 규칙)
사용 사례 기반 API 디자인
API를 설계할 때 특정 시나리오와 API에 대한 이해를 바탕으로 추상적인 분석을 수행하고 최종적으로 설계를 제공하는 것이 필요합니다.
API 디자인 일관성
API는 종종 여러 디자이너에 의해 완성되지만 전체 팀은 "모범 사례"의 몇 가지 기본 원칙을 유지할 수 있어야 합니다. 아무리 잘 디자인된 인터페이스라도 팀 전체의 일관성을 침해하는 한 우리는 차선책에 만족하는 편이 낫습니다.
간단하고 명확한 API
간단하고 일반적인 작업은 처리하기 쉬워야 합니다. 사용 사례 중심 접근 방식을 기반으로 설계하면 쉽게 구현할 수 있는 시나리오를 통해 이러한 API가 중요한 사용 사례를 완료할 수 있는지 쉽게 확인할 수 있습니다.
적은 것이 더 많다
API가 외부 세계에 제공하는 기능에는 사용 사례에 설명된 기능만 포함되어야 합니다. 이를 통해 필요한 기능과 실제로 제공되는 기능 간의 불일치를 방지할 수 있습니다.
지원 개선
도서관은 지속적으로 관리되어야 합니다. 새로운 요구가 생기거나 원저자가 떠나더라도 이 클래스 라이브러리는 버려지지 않습니다.
디자인실습
공개하고 싶은 것만 공개하세요
추가하기는 쉽고 제거하기는 어렵습니다.
첫 번째 버전 출시 시 불필요한 내용 제거
필드에 대한 메소드
정적 및 최종 선언된 기본 유형, 문자열 상수, 열거형 및 불변 객체를 제외하고 다른 필드는 노출되어서는 안 됩니다.
팩토리 메소드가 함수보다 낫다
팩토리 메서드의 반환 값은 반드시 선언된 형식의 인스턴스일 필요는 없지만 하위 클래스의 인스턴스일 수 있습니다.
매번 반환되는 객체는 새로 생성된 객체일 필요는 없으며 캐시될 수 있습니다.
동기화 제어, 객체 생성 전후의 코드 통합 처리
모든 것을 불변으로 만드세요
하위 클래스를 갖고 싶지 않다면 상속 불가능으로 만들어야 합니다.
Setter 메소드 남용 방지
필요한 경우가 아니면 공식 API에서 setter 메서드를 선언하지 마세요.
설정 활성화
상황에 민감할 수 있음
isEnable 판단은 setEnable을 의미 없게 만듭니다.
가능할 때마다 친구 메소드를 통해 기능을 노출하세요.
Java의 기본 패키지 액세스 방법, 내부 클래스
객체 생성자에게 더 많은 권한 부여
접근 권한
깊은 상속 노출 방지
코드 재사용
기능 재사용
"상속"은 특정 동작을 변경하는 데 사용되는 것이 아니라 몇 가지 추가 작업을 추가하는 데 사용됩니다.
특정 메소드의 실행 경로를 전환하기 위해 클래스를 상속하는 경우 이 접근 방식을 피해야 합니다.
권장사항: 깊은 상속을 피하고, 프로그램 인터페이스를 정의하고, 사용자가 이러한 인터페이스를 구현하도록 허용하세요.
구현보다는 인터페이스를 위한 프로그램
추상 정의(인터페이스)와 구현의 분리
협력
API 사용자에게 API를 사용할 때는 올바른 원칙을 따라야 한다는 점을 분명히 하세요. API를 사용해야 한다면 API의 원칙을 준수해야 하며 이를 위반해서는 안 됩니다.
API의 요구 사항을 명확하게 설명하고, 해당 사용 사례를 정의하고, API 설계자가 이러한 API를 구현하도록 돕습니다.
보호된 메서드는 제거할 수 없으므로 하위 클래스에서 수정됩니다.
인터페이스에 추상 메소드를 추가하면 비추상 서브클래스가 해당 메소드를 구현하게 됩니다.
모듈형 아키텍처
객체 지향은 스파게티 프로그래밍을 피하지 않습니다
모듈화의 목적: 다양한 구성 요소의 느슨한 결합 달성
모듈식 아키텍처는 사양과 구현을 분리합니다.
사양이 위치한 모듈에는 최소한 작은 "항목"이 있을 것입니다.
의존성 주입
봄
넷빈 조회
확장하다
P111 2001년에 우리는 JavaOne 컨퍼런스에 "구성 요소 포지셔닝 및 협력"이라는 주제를 제출했습니다. 이 주제에 포함된 내용은 이 장과 어느 정도 관련되어 있습니다. 그러나 당시 JavaOne 컨퍼런스의 조직위원회에서는 단순히 주제 이름이 별로 멋지지 않다고 생각했을 수도 있고, 어쩌면 컴포넌트라는 단어가 과도하게 사용되었다고 느끼기 때문에 "컴포넌트"라는 단어에는 상상할 수 있는 거의 모든 것이 포함되어 있다고 생각했을 수도 있습니다. 그래서 그 문제는 받아들여지지 않았습니다. 2006년까지 내 동료인 Tim Boudreau와 나는 "모듈형 아키텍처의 검색 주입 및 종속성 주입 패턴"이라는 유사한 주제를 제출했습니다. 예상했던 대로, 그 주제는 조직위원회에서 받아들여졌습니다. 이는 타겟 고객에게 깊은 인상을 주기 위해서는 타겟 고객과 가까운 용어를 찾아야 함을 의미합니다. '의존성 주입'이라는 단어를 듣자 그들의 마음은 뭉클해졌습니다. API라는 단어처럼 적절한 이름이 있으면 의사소통이 쉬워집니다. 사용자는 API라는 단어를 이해하기 쉬울수록 API 관련 콘텐츠를 더 쉽게 받아들일 수 있습니다.
실제로 아키텍처, 패턴이라는 단어가 더 있습니다.
API를 설계할 때 대상 사용자 그룹을 구별하세요.
API
추가할 수는 있지만 제거할 수는 없습니다.
특정 기능을 완료하기 위해 다른 사람에 의해 호출됨
최종 수업
응집력 있는, 독립적인
SPI
서비스 제공자 인터페이스
제거할 수는 있지만 추가할 수는 없습니다.
다른 사람들이 API 기능을 확장하기 위해
상호 작용
두 가지를 섞는 것을 피하세요
API를 합리적으로 분해
API
SPI
NetBeans 분류
핵심 API
지원 API
코어 SPI
지원 SPI
사용자 그룹의 다양한 요구 사항에 따라 API 구조 구성
테스트 가능성을 염두에 두세요
모의 객체
API에 대한 Mock 객체 제공
테스트 코드는 사양의 일부입니다.
좋은 도구를 사용하면 API 설계가 더 쉬워집니다.
마법사
고객이 최대한 빨리 시작할 수 있도록 하세요.
프로젝트의 첫 번째 목표는 신속하게 시장에 출시하는 것입니다.
NetBeans의 각 중요한 기술에는 초기 기본 프레임워크를 설정하는 해당 마법사가 있습니다.
호환성 테스트 스위트
SPI 사용자 및 API 구현자용
다른 API와 협업
타사 API를 주의해서 사용하세요.
포장 모드
추상적인 내용만 노출
노출이 많을수록 진화할 여지가 줄어듭니다.
API 일관성 강화
에이전트 및 포트폴리오
API 오용 방지
모든 수준 간에 일관성이 있어야 합니다.
API의 특정 런타임에 대한 일부 내용
“악명 높다” – 사용자에 대해 불평하기보다는 태도를 바꾸는 것이 좋습니다
"Guardian" - 자동화된 테스트
동기화 및 교착 상태
스레딩 모델을 정확하고 적절하게 설명합니다.
Java 모니터의 함정
상속은 동기화에 영향을 미칩니다.
공개 API의 경우 외부 메소드를 동기화됨으로 선언할 수 없습니다.
어디에서나 함정이 있는 Java 동기화 및 교착 상태
선언적 프로그래밍
기본 아이디어: API 사용자가 프로그램에 수행할 작업을 단계별로 지시하는 대신 프로그램에 결과를 지시한 다음 API가 작업을 수행하도록 하면 됩니다.
NetBeans 조회 구현에는 간단한 XML 설명만 필요하며 사용자 등록이나 로그아웃이 필요하지 않습니다.
자기 설명적
기와
실제 생활은 변화하는 요소로 가득 차 있으며 이론적인 것들은 그대로 생활에 적용할 수 없습니다. 무엇이 효과가 있고 무엇이 효과가 없는지 알아야 할 뿐만 아니라 그렇게 하려면 어떻게 작업해야 하는지도 알아야 합니다.
극단적인 의견은 도움이 되기보다는 해롭다
API 필요
아름답다
맞다
정확성을 위해 사용 편의성을 희생하면 더 많은 문제가 발생할 수 있습니다.
머큐리얼과 SVN
단순하게 유지하세요
고성능이다
완벽하게 호환됨
대칭이다
API 설계의 모순
모순되는
위키 정의: "상충되는 두 가지 견해가 모순된다는 사실을 깨닫지 못한 채 동시에 이를 믿는 것"
안전부
항공기 보안
개발자는 항상 리뷰, 프로그래밍 표준 등에 대해 불평합니다. 그러나 API 보호자는 항상 주의를 기울여야 합니다. 그렇지 않으면 작은 감독으로 인해 문제가 발생할 수 있습니다. 반면에, 그것은 단지 사소한 문제가 아니라, 적어도 당신이 하고 있는 일이 정말 유용하다는 것을 보여줍니다.
소수 보고서
API 개선
팀워크
코드를 제출하기 전에 코드 검토 수행
개발자가 API에 대한 문서를 제공하도록 설득하세요.
역추론
코드를 작성하기 전에
개요
자주하는 질문
성실한 모니터
도구는 주의가 필요한 모든 변경 사항을 모니터링합니다.
도구가 없다면 '전지전능한' 사람이 필요하다
API 패치 수신
좋은 조언만 받아보세요
요구사항 개발
요구사항은 너무 복잡하면 안 됩니다.
경쟁 게임을 사용하여 API 설계 기술 향상
www.xmindchina.net에서 다운로드 제공