¿Cómo nombrar las interfaces de repositorio y servicio?

¿Cómo nombra las interfaces de repositorio y servicio y sus clases de implementación?

Por ejemplo, tengo un modelo con el nombre Question. ¿Cómo llamaría al repositorio (interfaz e implementación) y al servicio (interfaz / implementación)?

Después de leer estas publicaciones: Convenciones de nomenclatura de interfaces / implementación de Java y nomenclatura de interfaces en Java, reconsideré lo que ya había hecho :)

Respuesta 1

Creo que hay aproximadamente dos enfoques para nombrar en DDD:

1) Estereotipo basado. Aquí es donde se incluye el estereotipo de clase en su nombre. Por ejemplo:

QuestionsRepository, TaxCalculatingService etc

2) Basado en dominio. En este enfoque, solo usa el lenguaje de dominio y omite cualquier estereotipo en los nombres de clase. Por ejemplo:

Questions (or AllQuestions), TaxCalculator etc.

Las clases de implementación se llamarían como SqlQuestionso InMemoryQuestions.

Probé ambos, pero ahora prefiero la segunda opción, ya que parece estar más alineada con la mentalidad DDD. Parece más legible y tiene una mejor relación señal / ruido. Lo siguiente es una cita de un gran artículo sobre repositorios de Phil Calçado:

El concepto de un repositorio como una lista de objetos no es demasiado difícil de entender, pero es muy común que esas clases terminen con métodos que no están relacionados en absoluto con las listas.

Después de entrenar a muchos equipos en la adopción de un lenguaje ubicuo y patrones relacionados, descubrí que la mejor manera de hacer que la gente recuerde que los repositorios no son clases similares a DAO comienza con cómo los nombras.

Hace años, Rodrigo Yoshima me contó sobre su convención al nombrar repositorios. En lugar del estilo de nombres más común que se muestra a continuación:

class OrderRepository {
   List<Order> getOrdersFor(Account a){...}
}

Él promueve esto:

class AllOrders {
   List<Order> belongingTo(Account a){...}
}

Parece un pequeño cambio pero ayuda mucho ...

Vale la pena leer y marcar el artículo completo.

Respuesta: 2

Tengo un problema al abrir extensiones * .jnlp con Internet Explorer. La extensión se abre correctamente en Chrome y Firefox, lo que me hace creer que es un problema con IE y posiblemente el servidor web / ...

Tengo un modelo de tabla personalizado cuyos datos quiero editar en una JXTable, pero solo lectura en una segunda JXTable. ¿Se puede hacer esto sin tener dos modelos separados? ¿Hay alguna forma de anular el modelo ...

Aunque he usado Swing antes, nunca he usado un diseñador de GUI y tengo problemas para acceder a los componentes que he dejado caer en mi panel desde mi código fuente. Creé un nuevo proyecto y elegí ...

Estoy estudiando Robolectric. El directorio de mi proyecto es, Los códigos de prueba de mi unidad MainActivityTest son los siguientes, package com.example.activity; importar android.app.Activity; import com.example.BuildConfig; ...