악한 싱글턴에서 벗어나기
TL;DR: 결합을 줄이기 위해 싱글톤을 리팩터링
public class DatabaseConnection { private static DatabaseConnection instance; private DatabaseConnection() {} public static DatabaseConnection getInstance() { if (instance == null) { instance = new DatabaseConnection(); } return instance; } public void connect() { } } public class Service { public void performTask() { DatabaseConnection connection = DatabaseConnection.getInstance(); connection.connect(); } }
public class DatabaseConnection { // 1. Identify the singleton public void connect() { } } public class Service { // 2. Locate all references to its getInstance() method. private DatabaseConnection connection; // 3. Refactor the singleton to a standard class. public Service(DatabaseConnection connection) { // 4. Inject it as a dependency. this.connection = connection; } public void performTask() { connection.connect(); } } DatabaseConnection connection = new DatabaseConnection(); // You can also mock the connection in your tests Service service = new Service(connection); service.performTask();
[X] 반자동
이 리팩토링은 싱글톤에 대한 모든 참조를 업데이트하고 해당 종속성을 올바르게 처리할 때 안전합니다.
각 단계를 테스트하여 싱글톤에 대한 참조가 누락되지 않았는지 확인합니다.
싱글톤에서 리팩토링하면 코드가 더욱 모듈화되고 테스트 가능해지며 전역 상태로 인해 발생하는 문제가 발생할 가능성이 줄어듭니다.
종속성을 주입하면 DatabaseConnection을 테스트 및 기타 컨텍스트에서 모의 구현이나 다른 구현으로 쉽게 대체할 수 있습니다.
Pixabay에서 가져온 PublicDomainPictures의 이미지
이 글은 리팩토링 시리즈의 일부입니다.
위 내용은 리팩토링 - 싱글톤 교체의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!