refactor(P3): combine을 IMultiInputConverter로 추출 — 엔진 ImageMagick 누수 봉합
ConversionEngine이 더 이상 ImageMagick에 의존하지 않는다(추상화 누수 확정 봉합). 결합(N→1)을 변환 그래프의 1입력 엣지로 표현 못 하던 한계를 1급 인터페이스로 분리(Branch by Abstraction). - Core/Providers/IMultiInputConverter.cs 신규 — CanCombineTo + CombineAsync(N→1). - MagickProvider가 IMultiInputConverter 구현 — 엔진의 CombineAsync/LoadImageForCombine/ ApplyCombineEncoding 코드를 동작 그대로 이주(CombinableOutputs도 이관). - ConversionEngine: using ImageMagick 제거(코드 참조 0건, grep 검증 — 주석만 잔존), CombineAsync는 _registry.All.OfType<IMultiInputConverter>()로 결합기를 찾아 위임하는 얇은 코드로 축소. 출력 디렉터리 결정만 엔진이 수행, 파일명·인코딩·쓰기는 결합기가 담당. - UI 무변경: 정적 CanCombine/CanCombineInput(순수 메타데이터, ImageMagick 무관)은 엔진에 그대로 유지. - 신규 테스트: MagickProvider가 IMultiInputConverter로 발견되는 seam 잠금. P1 combine 골든마스터(프레임수·NoCompression·치수·평균색 + PDF 헤더)가 추출 후에도 그린 = 동작 동일성 입증. 70개 테스트 전부 그린, 빌드 0경고/0오류.
This commit is contained in:
parent
8419bf30ff
commit
dad1c0bca3
4 changed files with 154 additions and 72 deletions
|
|
@ -59,6 +59,20 @@ public class DependencyInjectionTests
|
|||
Assert.Same(settings, sp.GetRequiredService<ISettingsStore>());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MagickProvider_IsDiscoverableAsMultiInputCombiner()
|
||||
{
|
||||
// P3: 엔진은 결합을 _registry.All.OfType<IMultiInputConverter>()로 찾는다.
|
||||
// 이 seam이 깨지면(MagickProvider가 인터페이스 미구현/Scrutor 미등록) 결합이 전부 실패한다.
|
||||
var reg = Everything2EverythingBootstrap.CreateDefault().Providers;
|
||||
var combiners = reg.All.OfType<IMultiInputConverter>().ToList();
|
||||
Assert.NotEmpty(combiners);
|
||||
Assert.Contains(combiners, c => c.CanCombineTo(".pdf"));
|
||||
Assert.Contains(combiners, c => c.CanCombineTo(".tif"));
|
||||
Assert.Contains(combiners, c => c.CanCombineTo(".gif"));
|
||||
Assert.DoesNotContain(combiners, c => c.CanCombineTo(".png")); // png은 결합 출력이 아님
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CreateDefault_Facade_StillWorks()
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue