Я работаю над веб-приложением Java, которое использует Spring для инъекций зависимостей и JMock для издевательства этих зависимостей в наших модульных тестах.
В настоящее время наша команда в какой-то момент имеет несколько разных мнений относительно того, как назвать определенные интерфейсы, которые мы используем. У нас нет проблем с именами интерфейсов в нашем домене, которые имеют множество реализаций, это просто. Однако, когда дело доходит до интерфейсов, для которых у нас есть только одна реализация и предполагается только одна реализация в будущем, мы попали в заблуждение.
Причина, по которой у нас есть такие интерфейсы, - это просто для насмешек, например, у нас есть сервисы и репозитории, которые мы изматываем в наших модульных тестах, и эти службы будут называться "DocumentMappingService" или для репозиториев "EmployeeRepository". На данный момент некоторые из парней просто префикс связанного имени интерфейса с "I", то есть "IDocumentMappingService" и "IEmployeeRepository". Другие называют интерфейс, как я уже выше, а затем добавьте "Impl" после имени интерфейса для класса реализации.
Третья "фракция" считает, что обе эти варианты бедны. Глядя на литературу, такую как известное "Растущее объектно-ориентированное программное обеспечение, руководствуясь тестами", можно было бы предположить, что оба из указанных выше вариантов являются плохими и что имя интерфейса должно четко определять контракт и имя классов реализации должен четко указывать, как этот контракт был реализован. Мы обнаружили, что это довольно сложно сделать в случае, о котором я упомянул выше.
Я надеялся, что у кого-то там была аналогичная проблема раньше, и есть некоторые предложения, которые этот вариант является лучшим и почему. Кроме того, если вы считаете, что параметры "I" и "Impl" являются плохими, пожалуйста, предложите конкретное альтернативное соглашение.