내가 프로그래밍 비교적 새로운 그리고 난 데 문제가 효과적으로 적용하는 방법을 이해하는 원리는 다음 링크 (현금 지급기 한)에서 나타났다 기본적으로 ISP (Interface Segregation Principle)에 불평하지 않는 디자인으로 시작하여 동작을 다른 인터페이스로 리팩토링하는 방향으로 나아갑니다.C# 인터페이스 분리 원칙의 예 혼란
내 질문 : 인터페이스를 사용하여 관련 추상화가 아닌 공통 동작을 표현하지 않습니까?
인터페이스에서 메소드를 캡슐화하는 것이 중요합니다. 인터페이스를 구현하려는 클래스와 공유되지 않는 경우도 있습니다. 이것이 어떤 시나리오에서 유용하다고 생각할 수 있습니까? 우리가 예를 들어 라인을 계속하면
은 다음 코드가 주어진다 :
public interface Transaction
{
void Execute();
}
public interface DepositUI
{
void RequestDepositAmount();
}
public class DepositTransaction : Transaction
{
private DepositUI depositUI;
public DepositTransaction(DepositUI ui)
{
depositUI = ui;
}
public virtual void Execute()
{ /*code*/
depositUI.RequestDepositAmount();
/*code*/ }
}
public interface WithdrawalUI
{
void RequestWithdrawalAmount();
}
public class WithdrawalTransaction : Transaction
{
private WithdrawalUI withdrawalUI;
public WithdrawalTransaction(WithdrawalUI ui)
{
withdrawalUI = ui;
}
public virtual void Execute()
{ /*code*/
withdrawalUI.RequestWithdrawalAmount(); /*code*/
}
}
public interface TransferUI
{
void RequestTransferAmount();
}
public class TransferTransaction : Transaction
{
private TransferUI transferUI;
public TransferTransaction(TransferUI ui)
{
transferUI = ui;
}
public virtual void Execute()
{ /*code*/
transferUI.RequestTransferAmount();
/*code*/
}
public interface UI : DepositUI, WithdrawalUI, TransferUI { }
지금까지 내가 이것을 이해로, 이전 디자인을 사용하기 위해 우리가해야 뭔가 같은 :
UI impui = new IMPLEMENTATIONUI(); // Some UI implementation
DepositTransaction dt = new DepositTransaction(Gui);
dt.Execute();
이제 IMPLEMENTATIONUI가 모든 단일 메소드를 구현할 필요가 없습니까? 그렇다면 SRP를 깨뜨리지 않을까요?
"인터페이스에서 메소드를 캡슐화 할 때, 구현하려고하는 클래스와 공유되지 않는 것은 무엇입니까?" ? isp는 어디에서 그렇게 말합니까 ?? – BartoszKP