PHP 잡담'재 구성-기 존 코드 의 디자인 개선'의 3 재 구성 데이터
소개
위의 글 을 이 어 받 은PHP 잡담'재 구성-기 존 코드 의 디자인 개선'의 함수 재 구성재 구성 방면 의 내용 을 계속 재 구성 하 다.
이 장 은 주로 데이터 에 대한 재 구성 이다.
1.논쟁의 소리--Field 를 직접 방문 하 시 겠 습 니까?함수(Accessor)를 통 해 Field 를 방문 하 시 겠 습 니까?
2.Array 를 Object 로 수정 합 니 다.Array 가 데이터 구조 와 비슷 한 것 을 보 았 을 때 Replace Array with Object 를 사용 하여 Array 를 대상 으로 만 들 수 있 습 니 다.데이터 구조 가 더욱 뚜렷 하 다.
전문 용어
accessor:방문 자,메모리―본 고 에서'함수'로 번역 합 니 다.
벙어리
domain class:비 즈 니스 논리 처리
presentation class:'데이터 표현 형식'으로 처리 합 니 다.
비 즈 니스 로직:비 즈 니스 논리
단 방향
bidirectional:양 방향
컬 렉 션:클 러 스 터
Self Encapsulate Field
상황:클 라 이언 트 가 직접 값 영역 에 접근 하면 클 라 이언 트 와 값 영역 간 의 결합 관계 가 점점 서 툴 러 집 니 다.그러면 이 값 영역 에 값/설정 함 수 를 만 들 고 이 함수 로 만 접근 합 니 다.
동기:
"간접 접근 변수":lazy Initialization 과 같은 보다 유연 한 데이터 획득 방식 을 지원 합 니 다.
"직접 접근 변수":코드 는 쉽게 읽 을 수 있 습 니 다."아,이 건 수치 함수 일 뿐 입 니 다."라 고 말 할 필요 가 없습니다.
선택:1.코드 규범 은 팀 의 대부분 사람들의 방법 에 따라 합 니 다.
2.개인 은 이런 방식 으로 번 거 로 움 을 가 져 올 때 까지'직접 방문 변수'를 좋아 합 니 다.
martin(작성 자)의 예:슈퍼 클 라 스 의 field 를 가 져 오고 싶 지만 subclass 에서 이 field 를 계산 한 값 으로 바 꾸 려 면 Self Encapsulate Field 를 사용 해 야 합 니 다.
제 예:저 는 보통 field 를 private 로 설정 합 니 다.외부 변수 가 이 field 를 사용 해 야 할 때 저 는 Self Encapsulate Field 를 사용 합 니 다.또는 field 의 값 이 변 했 을 때 Self Encapsulate Field 를 사용 합 니 다.
Replace Data Value with Object
상황:기본 형식의 field 가 필요 하 다 면 이 field 를 대상 으로 합 니 다.
동기:
개발 초기 에 우 리 는 기본 데이터 형식 으로 간단 한 행 위 를 표시 할 지도 모른다.예 를 들 어 전화 번 호 를 문자열 로 표시 할 수 있 지만 나중에 전화번호 의'포맷','검증','지역 번호 추출'과 같은 특수 행위 가 나타 날 수 있 습 니 다.이때 우 리 는 새로운 부류 가 필요 하 다.
Replace Array with Object
상황:당신 은 하나의 배열 이 있 습 니 다.배열 의 요 소 는 각각 다른 것 을 대표 합 니 다.그러면 대상 으로 배열 을 교체 하고 배열 의 모든 요소 에 대해 하나의 당직 구역 으로 표시 합 니 다.
동기:
배열 은 비슷 한 대상 에 자주 사용 된다.배열 의 요소 가 다 르 면 배열 의 첫 번 째 요 소 는 인명 이라는 약속 임 을 알 기 어렵다.대상 이 다 르 면 값 영역 이름과 함수 이름 을 통 해 이런 정 보 를 전달 할 수 있다.이렇게 하면 억지로 기억 할 필요 가 없고,주석 할 필요 가 없다.
Encapsulate Field
상황:class 에 Public 값 필드 가 있다 면 pirvate 로 설명 하고 해당 하 는 접근 함 수 를 제공 합 니 다.
동기:
대상 을 대상 으로 하 는 원칙 중 하 나 는 패키지(Encapsulate)또는'데이터 숨 김'이 라 고 부 르 는 것 이다.이 원 측 에 따 르 면,너 는 절대로 데 이 터 를 Public 로 성명 해 서 는 안 된다.
퍼 블 릭 데 이 터 는 나 쁜 방법 으로 여 겨 진다.
봉인 하면 코드 의 수정 이 비교적 간단 하 다.왜냐하면 모두 한 곳 에 집중 되 어 있 기 때문이다.
하나의 함 수 는 접근 함수(getting/setting)를 제외 하고 다른 행 위 를 제공 하지 않 습 니 다.이것 은 결국 dumb class(벙어리)일 뿐 입 니 다.이런 종류의 클 라 스 는 대상 기술 의 우 세 를 얻 을 수 없다.벙어리 를 해결 하 는 방법 은 Move Method 가 새로운 대상 으로 경쾌 하 게 옮 기 는 것 이다.
conclusion
저 는 제 가 이해 하 는 것 을 여러분 과 나 눌 수 있 기 를 바 랍 니 다.여러분 의 소중 한 의견 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.