코드 냄새가 나고 나쁜 것으로 보이는 다양한 프로젝트에서 내 코드의 무언가를 발견했지만 처리 할 수 없습니다.
"깨끗한 코드"를 작성하는 동안 코드를보다 쉽게 읽을 수 있도록 개인 메서드를 과도하게 사용하는 경향이 있습니다. 문제는 코드가 실제로 깨끗하지만 테스트하기가 더 어렵다는 것입니다 (예, 개인 메서드를 테스트 할 수 있다는 것을 알고 있습니다 ...). 일반적으로 나에게 나쁜 습관 인 것 같습니다.
다음은 .csv 파일에서 일부 데이터를 읽고 고객 그룹 (다양한 필드와 속성을 가진 다른 개체)을 반환하는 클래스의 예입니다.
public class GroupOfCustomersImporter {
//... Call fields ....
public GroupOfCustomersImporter(String filePath) {
this.filePath = filePath;
customers = new HashSet<Customer>();
createCSVReader();
read();
constructTTRP_Instance();
}
private void createCSVReader() {
//....
}
private void read() {
//.... Reades the file and initializes the class attributes
}
private void readFirstLine(String[] inputLine) {
//.... Method used by the read() method
}
private void readSecondLine(String[] inputLine) {
//.... Method used by the read() method
}
private void readCustomerLine(String[] inputLine) {
//.... Method used by the read() method
}
private void constructGroupOfCustomers() {
//this.groupOfCustomers = new GroupOfCustomers(**attributes of the class**);
}
public GroupOfCustomers getConstructedGroupOfCustomers() {
return this.GroupOfCustomers;
}
}
알 수 있듯이 클래스에는 작업을 수행하기 위해 일부 개인 메소드를 호출하는 생성자 만 있음을 알 수 있지만 일반적으로 좋은 방법 은 아니지만 어떤 경우에 메소드를 공개하지 않고 클래스의 모든 기능을 캡슐화하는 것을 선호합니다 클라이언트는 다음과 같이 작동해야합니다.
GroupOfCustomersImporter importer = new GroupOfCustomersImporter(filepath)
importer.createCSVReader();
read();
GroupOfCustomer group = constructGoupOfCustomerInstance();
클라이언트 측 코드에 쓸모없는 코드 줄을 구현 세부 사항으로 클라이언트 클래스를 괴롭 히고 싶지 않기 때문에 이것을 선호합니다.
그래서 이것은 실제로 나쁜 습관입니까? 그렇다면 어떻게 피할 수 있습니까? 위의 내용은 간단한 예입니다. 조금 더 복잡한 상황에서 같은 상황이 발생한다고 상상해보십시오.