실제로 솔리드 코드의 중요한 속성은 생성자 호출이 실제 응용 프로그램 코드 내에서 발생하지 않지만 주로 필요한 경우 컴포지션 루트 및 팩터 리 메서드에서 발생한다는 사실입니다. 이것은 나에게 많은 의미가 있으며, 나는이 모든 것을 할 수있다.SOLID : 동일한 클래스 생성자 호출이 허용됩니까?
나는 그것이 허용되는 것만 큼 단순한 클래스를 만들었지 만 위의 규칙에서 벗어나는 것이 맞습니다. 의 OpenSubKey()
방법은 실제로 공장을 사용하지 않고이 같은 클래스의 인스턴스를 생성
public class RegistryKeyProxy : IRegistryKey
{
private RegistryKey registrykey;
public RegistryKeyProxy(RegistryKey registrykey)
{
this.registrykey = registrykey;
}
public IRegistryKey OpenSubKey(string subKeyName)
{
var subkey = this.registrykey.OpenSubKey(subKeyName);
return (null == subkey ? null : new RegistryKeyProxy(subkey));
}
public IEnumerable<string> GetSubKeyNames()
{
return this.registrykey.GetSubKeyNames();
}
public object GetValue(string valueName)
{
return this.registrykey.GetValue(valueName);
}
}
하지만 때문에 폐쇄 개념 레지스트리 선물 : 이것은 다른 코드의 단위 테스트를 용이하게하기 위해 몇 가지 간단한 레지스트리 쿼리를 추상화 실제로는 은 레지스트리 키처럼 보이지만 실제로는 현재 개체와 정확히 같은 방식으로 작동하는 것을 반환하지 않는 것이 바람직합니다.
결국 나는 그것이 일하기를 얼마나 열심히하는지 알고 있습니다. 그러나 이것이 일반적으로 기본 개념의 본질 때문에 가능한 실현 가능한 길인지 알고 싶습니다. 규칙의 예외는 아니지만 실제로 SOLID 위반입니다.
"정말 SOLID 코드의 가장 중요한 특성 중 하나입니다
자세한 내용은이 유래 질문을 참조 함수)는 실제 응용 프로그램 코드 내에서 호출되지 않습니다. "- 필요한 인용문. –
자체 생성자를 호출하는 클래스는 private 구현 세부 사항이며 클래스 내의 코드가 자체 구현 세부 사항과 밀접하게 결합되는 것이 합리적입니다. 새로운 의존성은 여기에 소개되지 않습니다. –
@DonRoby : 문구가 너무 절대적이라고 인정하지만, 이해하면 그것은 단단한 작업을하는 주요 요소 중 하나입니다. 나는 다른 날에 마크 세이 만 (Mark Seemann)과 비슷한 것을 꽤 많이 읽었던 것을 기억합니다 (그러나 나는 기억하지 않습니다). – TeaDrivenDev