나는 최근에 an article that describes을 읽음으로써 그들이 SRP을 어떻게 깰 수 있는지 잘 알고 있습니다. 그리고 저는 오랫동안 세터와 getter로 하나의 수업을 썼기 때문에 저는 완전히 혼란스러워합니다.세터와 게터가 실제로 SRP를 손상합니까?
또한, 나는 found this을했습니다,하지만 SRP와 아무 상관이있다
그들은 논리를 가지고 있기 때문에음, 첫눈에, getter 및 setter 모두는 단일 책임 원칙을 아프게하지 않는 현재 클래스에만 속합니다. 그들은 한 가지 목적을 "섬기는"반원들을 억세스/쓰기 할 수있다. 벌금. 같은 CRUD
, 검증 등
등의 작업,
데이터 액세스 = 모두 세터와 게터
데이터 처리 = 데이터 처리 :
그러나의 첫 번째 기본 용어 정의 할 수 기다립니다 그렇다면 우리는 단일 클래스 내에서 두 가지 다른 책임을 가지므로 SRP을 위반합니다.
SRP를 중단하지 않기 위해 다른 클래스에서 데이터 액세스 및 데이터 조작을 정의한다고 가정 해 봅시다.
class DA { // <- Data Access
public string getName() {
return this.name;
}
public string setName(name) {
this.name = name;
}
}
class DataHandler {
public DataHandler(da) { // <- Inject an instance of DA
this.da = da;
}
public bool validate() {
// validation stuff
}
}
SRP를 위반하지 않았으므로 괜찮습니다. 하지만 여기에서는 DA 클래스에 단 하나의 setter와 getter 만 있습니다. 이제
질문 :
1) 나는 그것이 SRP를 중단하지 않습니다 만, 그래서 하나 개의 세터와 게터있는 경우에도 항상 다른 DA 클래스를 작성해야 하는가?
2) 세터와 게터는 실제로 SRP을 깨 트니까 어떤 클래스에서도 사용하면 안됩니까?
3) 그렇다면, 의존성 주입 항상 대답!?
:/편집 했어야합니다. SRP를 위반하는 경우 DI를 사용해야합니다. 확장자 이상의 조합. – Will
내 이전 - 이전 주석 (및 내 붙여 넣기 답변)을 확인하면 내가 어디에서 왔는지 생각할 수 있습니다. – Will
SRP를 깨지 않아도 여전히 IMHO가 아닙니다. 이름이 "name"이라는 getter setter가 있으면 더 이상 함수 이름에 동사가 없습니다. "getSetName"을 사용할 수 있지만 두 개의 동사가 있고 "두 가지 이상을 수행합니다"라는 비명이 있습니다. 또한 나는 이상한 명명법 때문에 Least Astonishment의 원리를 깨뜨릴 것이라고 생각한다. –