Creo que hay dos aproximaciones para nombrar en DDD:
1) Basado en estereotipo. Aquí es donde incluyes 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.
clases de implementación serían nombrados como SqlQuestions
o InMemoryQuestions
.
Intenté ambas opciones, 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 que sigue es una cita de un great article en los repositorios por Phil Calçado:
El concepto de un repositorio como una lista de los objetos no es demasiado difícil de entender, pero es muy común para aquellas clases que terminan con métodos que son no relacionado con listas en absoluto.
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 DAO comienza con la forma en que los nombra.
Hace años, Rodrigo Yoshima me contó sobre su convención al nombrar Repositorios. En lugar del estilo de nombres más comunes se muestran a continuación:
class OrderRepository {
List<Order> getOrdersFor(Account a){...}
}
promueve esto:
class AllOrders {
List<Order> belongingTo(Account a){...}
}
Se ve como un cambio pequeño pero ayuda mucho ...
Todo el artículo bien vale la pena leerlo y marcarlo.
Sé que esto puede ser un detalle menor, pero ¿la clase implementadora debe tener un sufijo o prefijo? SQLAllQuestions o AllQuestionsSQL? ¿Qué prefieres? – LuckyLuke
Yo personalmente usaría SqlAllQuestions, pero no veo ninguna razón para no usar AllQuestionsSql, podría ser incluso mejor. Como dices, realmente no importa porque este nombre solo se usaría en una parte de la raíz de la composición de tu aplicación y no lo verías demasiado (http://blog.ploeh.dk/2011/07/28/ CompositionRoot.aspx) – Dmitry
Una cosa más. Leí su enlace y fue genial, pero ¿qué hace cuando tiene la interfaz AllQuestions y desea hacer una lista de todas las preguntas? AllQuestions.everything()? ¿Hay alguna convención o algo al hacer CRUD? – LuckyLuke