나는 현재 내가 쓰고있는 수업에 대한 인터페이스에 대해 생각하고 있습니다. 이 클래스에는 캐릭터의 스타일, 예를 들어 캐릭터가 굵은 체, 이탤릭체, 밑줄 등이 있습니다. 값을 변경하는 메소드에 getter / setter 또는 논리적 이름을 사용해야하는지 이틀 동안 나 자신과 토론했습니다. 이 스타일. 논리적 이름을 선호하는 경향이 있지만, 효율적이지 않고 논리적이지 않은 코드를 작성한다는 의미입니다. 예를 들어 보겠습니다.
나는 수업이있어 CharacterStyles
멤버 변수가 bold
, italic
, underline
(일부 다른,하지만 난 간단하게 그들을 떠날 것이다). 가장 쉬운 방법은 당신이 할 수 있도록, 쓰기 게터 / 세터 메소드하는 것, 이러한 변수에 액세스하는 프로그램의 다른 부분을 수 있도록 styles.setBold(true)
하고 styles.setItalic(false)
.
그러나 나는 이것을 좋아하지 않습니다. 많은 사람들이 getters / setters가 캡슐화를 깨뜨린다고 말했을뿐 아니라 (정말 나쁘지 않은가), 대부분 논리적이지 않은 것이기 때문입니다. 나는 하나의 방법 styles.format("bold", true)
이나 그와 비슷한 것을 통해 캐릭터의 스타일을 기대 하지만 이러한 모든 방법을 통해서는 아닙니다.
그래도 한 가지 문제가 있습니다. C ++에서 문자열의 내용으로 객체 멤버 변수에 액세스 할 수 없으므로 모든 스타일에 대해 큰 if 문 / 스위치 컨테이너를 작성하거나 스타일을 연관 배열에 저장해야합니다 ( 지도).
가장 좋은 방법이 무엇인지 알 수 없습니다. 한 순간 나는 게터 / 세터를 써야한다고 생각하고, 다음 순간에는 다른 방향으로 몸을 기울입니다. 내 질문은 : 당신은 무엇을 할 것인가? 왜 그렇게하겠습니까?
bold
설정 true
하고 다른 변수가 정의되지 않은 CharacterStyles가있는 경우 다른 변수의 getter 메소드는 부모 스타일의 값을 반환해야하지만 다른 속성에 저장된 속성은 getter bold
가 반환해야합니다 true
. 이름과 인터페이스에 표시되는 방식과 같은 다른 것들이 있습니다.