보고서 모듈에는 리팩토링하려는 전자 메일 서비스가 있으므로 일반 용도의 전자 메일 서비스로 사용할 수 있습니다. 사실, 나는 그들이 리팩토링의 주요 이유가되도록 비밀번호를 재설정하고자 할 때 사용자에게 이메일을 보내야한다는 요구 사항이 있습니다.Java의 인터페이스에 클래스 메소드 리 팩터링
public class EmailService{
public Email buildEmail(ReportRequest reportRequest){
//build email using ReportRequest object here
}
}
@Builder
@Getter
@Setter
@AllArgsConstructor
public class Email implements Serializable {
private String subject;
private String text;
private String recipientEmail;
private String senderEmail;
}
I는이처럼 리팩토링했다 방법 : 나는 buildEmail() 메소드가 EmailService라는 인터페이스를 생성
합니다. 나는 이것을 구현하는 클래스가 이메일을 작성/작성하는 다른 방법을 가질 것이라고 생각했습니다. 지금
public interface EmailService{
public Email buildEmail();
}
public class ReportEmailService implements EmailService{
public Email buildEmail(){}
}
public class PasswordEmailService implements EmailService{
public Email buildEmail(){}
}
내 질문이되면, buildEmail에 필요한 객체를 전달하는 가장 좋은 방법 일 것입니다 무슨 다른 개체 (예를 들어, ReportRequest 또는 AccountInfo의 같은 다른 객체)를 사용합니다 이메일을,() 구축 이후?
내가 한 것은 buildEmail()에서 사용할 필수 개체의 클래스 변수를 만들고 다른 메서드를 만드는 것입니다.
는 기본적으로, 지금은 다음과 같습니다
public class ReportEmailService implements EmailService{
private ReportRequest reportRequest;
public void sendEmail(ReportRequest reportRequest){
this.reportRequest = reportRequest;
Email email = buildEmail();
}
public Email buildEmail(){
#build email now using the report request object.
}
}
public class PasswordResetEmailService implements EmailService{
private AccountInfo accountInfo;
public void sendEmail(AccountInfo accountInfo){
this.accountInfo= accountInfo;
Email email = buildEmail();
}
public Email buildEmail(){
#build email now using the account info object.
}
}
나는 나의 접근 방식은 다소 어색하다고 생각합니다. 디자인 패턴 및 리팩토링 측면에서 뭔가 기본적인 것을 놓친 것일 수 있습니다. 그렇다면 리팩토링에서 가장 좋은 방법은 무엇일까요? 또는 buildEmail()이 이메일을 작성할 때 필요한 특정 객체에 액세스 할 수있는 방법은 무엇입니까?