이 긴 질문에 대해 유감스럽게 생각합니다. 아주 구체적인 답변이 없을 수도있는 것이 있기 때문에 위키에 플래그가 지정되어 있습니다. 그것이 닫혀 있다면, 그렇게하십시오. 유창 인터페이스를 사용하는 프로그램은 기존의 내부에 새로운 단어에 압정 할 수 있도록 완전히 기본 클래스에 정의되지 않은 유창 인터페이스를 작성합니다 어떻게유창한 인터페이스 경험이 있으십니까? 나는 너의 의견이 필요해!
을 :
내 주요 질문은 이것이다 구조를 유지하고지도 인터페이스를 유지하므로 도트 뒤에 인텔리 센스는이 시점에서 실제로 적용되는 키워드 만 나열합니다.
나는 내 IoC 컨테이너를 재 작성의 제 3 반복에있어. 두 번째 반복은 성능을 향상시키는 것이었고 세 번째 반복은 확장 성 문제와 분리 문제를 해결하는 것입니다.
기본적으로 확장 성 문제는 아무 것도 없다는 것입니다. 최근에 평생 서비스를 사용하고 싶었고 평생 서비스가 만료 된 후 새로운 사본을 해결합니다. 예를 들어 매분마다 구성 파일을 읽지 만 더 자주는 아닙니다. 이것은 현재의 IoC 솔루션에서 지원되지 않지만 기본 클래스 라이브러리에 들어가서 거기에 지원을 추가하는 것이 유일한 방법입니다. 즉, 확장 가능한 클래스 라이브러리를 작성하지 못했습니다. 모든 공정성에있어서, 나는 그것에 확장 성을 지 으려고하지 않았지만, 그런 다음에는 얼마나 고통 스러울지를 충분히 인식하지 못했고 나중에 이와 같은 것을 추가했습니다.
구성에 대한 유창한 인터페이스를보고 있으며, 인터페이스에 대한 완전한 확장 성을 구축하고 싶기 때문에 (또는 제거 할 필요가 있습니다.) 나는 다르게해야합니다.
마찬가지로, 귀하의 의견이 필요합니다. 유창한 인터페이스를 실제로 사용하는 경험은 거의 없지만 사용하는 코드가 상당히 많아서 즉시 사용할 수있는 이점이 하나 있습니다.
- 유창한 인터페이스를 사용하는 코드는 다음과 같습니다.
ServiceContainer.Register<ISomeService>() .From.ConcreteType<SomeService>() .For.Policy("DEBUG") .With.Scope.Container() .And.With.Parameters .Add<String>("connectionString", "Provider=....") .Add<Boolean>("optimizeSql", true);
이보다 쉽게 읽을 수있다 : 즉
, 숙지 일반적으로 매우 쉽게
ServiceContainer.Register(typeof(ISomeService), typeof(SomeService),
"DEBUG", ServiceScope.Container, new Object[] { "Provider=...", true });
가독성은 하나의 문제입니다.
그러나 프로그래머 지침은 기존 코드를 웹이나 편집기를 통해 쉽게 이해할 수없는 또 다른 것입니다.
기본적으로,이를 입력 할 때 :
ServiceContainer.Register<ISomeService>()
.From.|
^-cursor here
와는 IntelliSense를 사용 가능한 해상도의 종류를 표시합니다. 그 중 하나를 고른 후 다음과 같이 작성하십시오 :
그런 다음 "정책"과 같은 "For"키워드 다음에 사용할 수있는 항목 만 제공됩니다.
그러나 이것은 큰 문제입니까? 유창한 인터페이스를 사용해 본 경험이 있습니까?인터페이스를 정의하는 확실한 방법은 클래스 또는 인터페이스를 모든 키워드와 모든 항목으로 만드는 것입니다. 각 쉼표 뒤에 모든 정보가 포함 된 IntelliSense가 포함될 수도 있지만 이것이 합법적 인 경우도 발생할 수 있습니다 (예 : 컴파일) 코드 :
ServiceContainer.Register<ISomeService>()
.From.ConcreteType<SomeService>()
.From.Delegate(() => new SomeService())
.From.With.For.Policy("Test");
그래서 난 당신이 서비스를 해결하는 방법을 지정한 후, 다시 그렇게 할 수있는 유창한 인터페이스는 구조 싶습니다.
- 즉, 유창한 인터페이스는 수행 할 수있는 방향으로 안내하기 때문에 매우 사용하기 쉽습니다.
하지만 이것은 일반적인 것입니까? Resolver (ConcreteType, Delegate 등) 유형, 범위 유형 (Factory, Container, Singleton, Cache 등)의 유형을 확장 메소드로 추가하여 이러한 키워드를 추가 할 수 있으므로 프로그램은 기본 클래스를 변경하지 않고도이를 수행 할 수있는 고유 한 방법을 정의 할 수 있습니다. 즉, 모든 중간 정지를위한 인터페이스를 제공하고 실제 중요한 키워드를 제공해야 함을 의미합니다. 그런 다음 해당 키워드를 구현하면 적절하게 반환 할 하나의 중간 중지 인터페이스를 선택해야합니다.
- xyz.From : 내가위한 인터페이스를 정의 할 필요가 같은
그래서 그것은 본다.
<Resolver here>.With.
<Resolver here>.For.
등
xyz.From.<Resolver here>.
유창한 인터페이스 경험이있는 사람이라면 누구나 돌아가서 가장 가까운 곳에서 인용 한 대답을 읽고 나에게 짧은 대답을 줄 수 있습니까?
이럴 .With.Scope.Container() And.With.Parameters ...유창한 학대처럼 보입니다. –
내가 말했듯이, 나는 많은 사용 경험이 없다. 어떻게 구조 조정을하겠습니까? –