2011-04-02 9 views
6

Tengo una clase (llamémoslo MyService) que acepta dos dependencias en su constructor. El primero no es tan relevante para la pregunta. El segundo es PaymentDetails. PaymentDetails vive por más tiempo que MyService, que es creado por una fábrica para procesar esta solicitud en particular.Cómo reducir el acoplamiento cuando una clase llama solo a un método en otra clase que tiene muchos métodos?

En MyService.process(), que:

  • hace algunas cosas con la primera dependencia,
  • construye un objeto new TransactionDetails() y establece varias cosas en él,
  • llamadas myPaymentDetails.setTransactionDetails(td);
  • vuelve algo que decir, que la página en el asistente sigue a continuación

PaymentDetails tiene por necesidad muchos métodos en él. Es un objeto de estilo Entity en el que se genera información a medida que el usuario avanza por una serie de aproximadamente 5 páginas.

Lo que me molesta es que, como está escrito, mi clase de servicio depende de la totalidad de PaymentDetails, pero solo llama a un único método.

Esto me molesta porque:

  • que limitará la capacidad de volver a utilizar la clase de servicio
  • no es posible comprender lo que las dependencias reales están leyendo las firmas de los métodos

Mi pregunta es:

¿Cuál es la mejor manera de solucionar esto para que mi clase de servicio tenga dependencias mínimas?

Respuesta

13

Se puede crear una interfaz sencilla:

public interface TransactionAcceptor { 
    void setTransactionDetails(TransactionDetails td); 
} 

Tener PaymentDetails declarar que implementa la interfaz:

public class PaymentDetails implements TransactionAcceptor { 
    ... 
} 

Y por supuesto que ya implementa el método requerido. Luego, MyService solo necesita tratar con la interfaz TransactionAcceptor y no debe acoplarse con PaymentDetails.

4

Agregue interface Transactionable o algo así y deje que PaymentDetails lo implemente. En MyService, solo trato con 'Transactionables'.

Cuestiones relacionadas