강결합 코드를 의존성 주입 기법(DI)을 사용하여 결합도를 낮춰보는 예제이다.
- CollectDataActor가 DeleteFileService에 의존성을 가지고 있다.
- 이로인해서 CollectDataActor클래스는 DeleteFileService클래스에 강하게 결합되어 있고, 테스트나 변경사항에 취약할 수 있다.
public class CollectDataService
{
private readonly DeleteFileService _deleteFileService;
public CollectDataService(...)
{
_deleteFileService = new DeleteFileService();
}
public List<StartParseSmf> CollectDatas(CollectRecipe collectRecipe)
{
_deleteFileService.DeleteFiles(collectRecipe.ErrorPath, collectRecipe.ErrorDeleteDay);
}
- interface를 통해서 의존성 주입을 한다.
- 먼저, CollectDataService클래스 interface 추출을 한다.
public interface IDeleteFileService
{
void DeleteFiles(string errorPath, int errorDeleteDay);
}
...
public class DeleteFileService : IDeleteFileService
{
public void DeleteFiles(string errorPath, int errorDeleteDay)
{
...
}
}
- CollectDataService는 이제 interface 참조한다.
public class CollectDataService
{
private readonly IDeleteFileService _deleteFileService;
public CollectDataService(...)
{
_deleteFileService = new DeleteFileService();
}
public List<StartParseSmf> CollectDatas(CollectRecipe collectRecipe)
{
_deleteFileService.DeleteFiles(collectRecipe.ErrorPath, collectRecipe.ErrorDeleteDay);
}
}
- 그러나 CollectDataService()에서 DeleteFileService의 생성자를 호출하므로, 의존성을 가지고있다.
- DeleteFileService의 의존성 제거를 위해, 의존성 주입 기법(DI)을 사용해보자.
public class CollectDataService
{
private readonly IDeleteFileService _deleteFileService;
public CollectDataService(..., IDeleteFileService deleteFileService)
{
_deleteFileService = deleteFileService;
}
public List<StartParseSmf> CollectDatas(CollectRecipe collectRecipe)
{
_deleteFileService.DeleteFiles(collectRecipe.ErrorPath, collectRecipe.ErrorDeleteDay);
}
}
- IDeleteFileService구현제를 생성 -> CollectDataService 생성자에 주입하도록 한다.
IDeleteFileService deleteFileService = new DeleteFileService(); CollectDataService service = new CollectDataService(deleteFileService);
'프로그래밍' 카테고리의 다른 글
[TDD] 테스트 대역 (Test double) (0) | 2023.12.13 |
---|---|
정규 표현식 변환 시 유용한 사이트 (0) | 2023.11.17 |
[클린코드] 11장 시스템 (0) | 2023.10.29 |
[클린코드] 10장 클래스 (0) | 2023.10.29 |
[클린코드] 6,7장 정리 (1) | 2023.10.18 |