Как назвать репозиторий и сервисные интерфейсы? - PullRequest
8 голосов
/ 22 февраля 2012

Как вы называете репозиторий и интерфейсы служб и их реализующие классы?

Например, у меня есть модель с именем Question.Что бы вы назвали хранилищем (интерфейс и реализация) и службой (интерфейс / реализация).

После прочтения этих сообщений: Соглашения об именах интерфейсов Java / реализации и Имена интерфейсов вJava Я пересмотрел то, что я уже сделал:)

Ответы [ 2 ]

9 голосов
/ 22 февраля 2012

Я думаю, что в 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){...}
}

Это выглядит как небольшое изменение, но очень помогает ...

Вся статья достойна прочтения и закладки.

2 голосов
/ 22 февраля 2012

Я лично использую FooService, FooServiceImpl, FooRepository и FooRepositoryImpl.

Вы можете утверждать, что суффикс Impl является шумом, но

  • обычно есть только одна реализация, поэтому нет FirstFooService и SecondFooService
  • конкретные типы FooXxxImpl нигде в коде не используются, кроме как в модульных тестах: вводятся зависимости, а их тип является интерфейсом
...