Я думаю, что в DDD существует примерно два подхода к именованию:
1) На основе стереотипа. Здесь вы включаете стереотип класса в его название. Например:
QuestionsRepository, TaxCalculatingService etc
2) Домен на основе. При таком подходе вы используете только язык домена и опускаете любые стереотипы в именах классов. Например:
Questions (or AllQuestions), TaxCalculator etc.
Классы реализации будут именоваться как SqlQuestions
или InMemoryQuestions
.
Я пробовал оба варианта, но теперь я предпочитаю второй вариант, так как он, кажется, больше соответствует мышлению DDD. Он кажется более читаемым и имеет лучшее отношение сигнал / шум. Ниже приводится цитата из замечательной статьи о репозиториях Фила Кальсадо:
Понятие репозитория как списка объектов не слишком сложно для понимания, но для этих классов очень распространено использование методов, которые вообще не связаны со списками.
После обучения многих команд принятию универсального языка и связанных с ним шаблонов я обнаружил, что лучший способ заставить людей помнить, что репозитории не являются классами, подобными DAO, начинается с того, как вы их называете.
Несколько лет назад Родриго Йошима рассказал мне о своем соглашении, когда называл хранилища. Вместо более распространенного стиля именования, показанного ниже:
class OrderRepository {
List<Order> getOrdersFor(Account a){...}
}
Он продвигает это:
class AllOrders {
List<Order> belongingTo(Account a){...}
}
Это выглядит как небольшое изменение, но очень помогает ...
Вся статья достойна прочтения и закладки.