Yun Chan
944187c314
refactor(P5b-7): 잔여 이벤트 핸들러 전부 커맨드/behavior로 — XAML 이벤트 핸들러 0개
...
Microsoft.Xaml.Behaviors.Wpf 도입. MainWindow.xaml에 직접 이벤트 핸들러(Click/SelectionChanged/Drop/
MouseUp 등) 0개 — 전부 선언적 바인딩·커맨드·InvokeCommandAction으로 전환.
- 드래그앤드롭(DragOver/DragLeave/Drop) → i:EventTrigger + InvokeCommandAction(PassEventArgsToCommand),
HandleDragOver/HandleFilesDropped(DragEventArgs) 추출.
- 동적 포맷 콤보 SelectionChanged → OutputFormatChangedCommand(OnOutputFormatSelected).
- 큐·이력 행 PreviewMouseLeftButtonUp → QueueRow/PastRowCommand(MouseButtonEventArgs, IsInsideButton 가드
보존 + e.OriginalSource.DataContext로 항목 해소).
- ProcessQueueButton Click → ProcessQueueCommand.
- 검증: 빌드 0/0, 83 테스트 그린, publish 후 메인 창 크래시 없이 로드(behaviors self-contained 정상).
드래그앤드롭·행 미리보기·포맷 변경 실동작은 GUI 스모크 권장(비치명적 실패 모드).
2026-06-02 10:17:21 +09:00
Yun Chan
ba5738e705
refactor(P5b-1): CommunityToolkit.Mvvm 도입 + OptionsViewModel 추출 (옵션 로직 테스트화)
...
MVVM 첫 슬라이스 — 테스트 불가능했던 코드비하인드 BuildOptions의 순수 옵션 구성 로직을
헤드리스 단위테스트 가능한 OptionsViewModel.ToConvertOptions로 추출. XAML 바인딩 미변경(런타임 위험 0).
- CommunityToolkit.Mvvm 8.2.2(CPM) + App.csproj. App/ViewModels/OptionsViewModel.cs:
ObservableObject + [ObservableProperty](Quality/CustomOutputDirectory/ConflictRule/AiTaskIndex/
TargetLanguage/VideoPreferGpu) → 향후 옵션 패널 직접 바인딩 토대. ToConvertOptions()는 순수.
- MainWindow.BuildOptions: 컨트롤 값을 VM에 반영 후 ToConvertOptions() 위임(동작 동일).
- Tests → App ProjectReference 추가(App 뷰모델 헤드리스 테스트 가능화).
- OptionsViewModelTests 10케이스(품질매핑·AVIF clamp·커스텀폴더 trim·AI작업·대상언어·충돌/GPU).
71 → 81개 테스트 전부 그린, 빌드 0경고/0오류.
2026-06-02 09:51:49 +09:00
Yun Chan
8419bf30ff
refactor(P2): DI 컴포지션 루트 + Scrutor 어셈블리 스캔 자동등록
...
컴파일타임 하드코딩(Bootstrap 14개 new + 수동 생성자 와이어링)을 제거 — 새 Provider는 클래스만
추가하면 자동 등록되고 그래프가 변환 엣지를 자동 흡수(확장성 토대). Strangler Fig 파사드로 호출부 무변경.
- Core/ServiceCollectionExtensions.AddEverything2Everything: Scrutor FromAssembliesOf →
AssignableTo<IConverterProvider> → AsSelfWithInterfaces(단일 싱글턴 공유) → Singleton.
Heic(Magick)/Docx·Ocr·Hwpx(Pdf)/Llm(Settings) 생성자 의존 자동 해소. ProviderRegistry/Engine 등록.
- Bootstrap.CreateDefault: 내부를 DI(BuildServiceProvider→GetRequiredService)로 교체하되
시그니처·동작 불변 — App/CLI/테스트 호출부 전부 무파손.
- 패키지: Microsoft.Extensions.DependencyInjection 9.0.0, Scrutor 4.2.2 (CPM 경유).
- DependencyInjectionTests: 14개 전수 해소 + 생성자 의존 자동 와이어링 + AsSelf 동일 인스턴스
+ 공유 Settings + 파사드 하위호환 검증(적대적 리뷰의 'AsSelf 누락 silent 실패' 방어).
App.xaml.cs Generic Host 전환·서비스로케이터 제거는 GUI 스모크가 필요해 P5(MVVM 생성자 주입)로 통합.
69개 테스트 전부 그린(65+4), 빌드 0경고/0오류, 골든마스터 녹색 유지(동작 불변).
2026-06-01 23:30:06 +09:00
Yun Chan
f36ee299f4
refactor(P0): CPM 도입 + Magick.NET 14.13.1 통일
...
- src/Directory.Packages.props 신규 — 모든 PackageReference 버전의 단일 출처(SSOT)
- ManagePackageVersionsCentrally=true, 3개 csproj에서 Version 속성 제거
- Magick.NET-Q16-AnyCPU Core 14.13.0 → 14.13.1로 통일(Tests와 정합)
테스트와 프로덕션이 동일 네이티브 바이너리로 동작 → 골든마스터 신뢰 기반 확보
빌드 0경고/0오류, 38개 테스트 전부 그린.
2026-06-01 23:02:16 +09:00