문제

나는 최근에 작업을 시작했 자바에서 도입된 야생의 미친 세계현에 대한 모든 것입니다.나는 그것을 싫어 처음에는,그러나 신속하게 사용되었습니다.너무은 그것을 사용하고 있습니다.

나는 많은 시간을 보내는 요즘 생각에 대해 더 많은 클래스 디자인을 기준으로 합니다.는 것들 중 하나 내가 하려는 것은 피의 함정을 하기현에 대한 모든 것입니다.그러나,많은 작품과 함께 할체는 주로 컨테이너 데이터 그리고 나는 특정현이 실제로 부적절한 이러한 경우.

여기에 간단한 예제를 사용하여 공공의 속성입니다.

class Space {
    public String name;
    public String description;
    Space(final String name, final String description) {
        this.name = name;
        this.description = description;
    }
}

여기에 간단한 예제를 사용하여 개인성과 사용하여 구현.

class Space {
    private String name;
    private String description;
    Space(final String name, final String description) {
        this.name = name;
        this.description = description;
    }
    public String getName() {
        return this.name;
    }
    public void setName(final String name) {
        this.name = name;
    }
    public String getDescription() {
        return this.description;
    }
    public void setDescription(final String description) {
        this.description = description;
    }
}

이 예제에서,모두 namedescription 필드할 수 있어야 합 변경 될 수 있습니다.

같은 느낌이터 구 예상 명확하고 숨겨 구현의 세부 사항 namedescription 니다.그것은 또한 허용한 유효성 검사에서 나중에 설정이 필요합니다.

I have read 여러 토론에 대해 구현되는 악 및/또는 안티-패턴 있지만,그것은 같은 사람들에 적용되지 않을 수도 있습니다.

어쩌면 몇 가지 옵션이 있습니다 저는 아직도 간주됩니다.나는 열에 대한 제안!

도움이 되었습니까?

해결책

을 넣어 그것은 간단하다:

  • 야 할 필요한 것입을 위한 모든 필드를 읽어야 합니다.
  • 당신이 필요 setters 을 위한 모든 필드를 작성해야합니다.

이 될 수 있습니다 100%,그러나 대부분의 시간이 적습니다.

다른 팁

첫번째 버전(공용성)은 좋은 생각이 아니다.두 번째는 더 낫습니다.으로 조쉬 블로흐,말 "은혜는 불변성":

public class Space {
    private final String name;
    private final String description;

    public Space(final String name, final String description) {
        this.name = name;
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }
}

그는 말했다, 현하는 경향이 남용.

어를 들었을 자주 지나치게 단순화"get/세터 악".아무도(겠) 는 것을 의미있는 아무것도 잘못한 데이터를 객체입니다.내가 생각하는 진짜 아이디어입니다:

"Getters/세터들은 악을 제외하고,일반 데이터 스토리지 개체"는 자는 복음 전파의"말하지 않는 요청".

이 경우 클래스고 있현,그의 모든 그것이 있어야합니다.

논되는 어쨌든.나는 확실하지 않다 나도 동의합니다.

는 동안 접근 패턴을 구현 정보의 클래스(예.를 사용하여 해시 테이블에 저장 속성을 메모리에 저장 때때로 사용되는 클래스),그것은 매우 자세한 정보를 구현하는(당신의 예에는 12 개 라인으로 더 많은 접근).그 이유는 C#특별한 속성을 구할 수 있습을 간결하게 지정하는 기본 접근자:

class Space {
    public String Name { get; set; }
    public String Description { get; set; }
    Space(final String name, final String description) {
        this.Name = name;
        this.Description = description;
    }
}

대체될 수 있습에 대한 액세스를 추가 지정자 및/또는 코드:

private String _name;
public String Name {
    get { if (_name == null) FetchName(); return _name; }
    private set { _name = value; }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top