2014-01-14 2 views
2

과의 인터페이스를 구현하는 클래스에 단일 책임 원칙을 구현 나는 반드시 내 클라이언트 측 프로그램으로 이유없이 변경하지 않으 인터페이스는에 의존 한 :두 책임

public interface RMIChatServer extends Remote { 
public void connect(RMIChatClient theClient) throws RemoteException; 
public void sendMessageToServer(String theMessage) throws RemoteException; 
} 

그리고 이 기능을 구현하는 RMIChatServerImpl 클래스가 있습니다. 저는 책임감의 원칙을 지키면서 메시지를 다른 반에 보내는 책임을 옮기고 싶습니다.

답변

4

두 클래스를 별도의 클래스로 구현 한 다음 RMIChatServer 구현을 통해 별도의 클래스 인스턴스에 호출을 위임하게합니다.

class Connector { 
     public void connect(RMIChatClient theClient) throws RemoteException { 
     } 
} 

class Sender { 
     public void sendMessageToServer(String theMessage) throws RemoteException { 
     } 
} 

class ChatSender implements RMIChatServer { 
    Connector connector = new Connector(); 
    Sender sender = new Sender(); 

    public void connect(RMIChatClient theClient) throws RemoteException { 
     return connector.connect(theClient); 
    } 

    public void sendMessageToServer(String theMessage) throws RemoteException { 
     return sender.sendMessageToServer(theMessage); 
    } 
} 

난 당신이 생각이 특정한 경우에 너무 멀리 단일 책임 원칙을 밀어하려고 할 것 같아요. 서버에 연결하는 것은 메시지를 보내는 데 필요한 전제 조건이므로 별도의 책임이 아니라 서버와 통신하는 동일한 책임의 일부로 간주 될 수있는 유효한 인수가 있습니다.

0

원격 인터페이스를 변경해야 할 충분한 이유가 있습니다. 연결하기 전까지는 메시지를 보낼 수 없어야한다고 가정하면 connect() 메서드는 sendMessageToServer() 메서드가 포함 된 다른 원격 인터페이스를 반환해야합니다. send 메쏘드를 구현 한 객체는 레지스트리에 있어서는 안되며, connect() 메소드를 통해서만 액세스 할 수 있어야합니다. 이렇게하면 연결 제약 조건을 표현하는 준 구문 론적 방법을 얻을 수 있습니다. 그런 다음 두 개의 구현 클래스를 가지며 책임을 분리하고 시스템의 보안을 향상시킬 수 있습니다.