Может ли класс, имеющий только один публичный метод void, называться «service»? - PullRequest
0 голосов
/ 26 июня 2018

Я пишу реализации определенного Validator интерфейса.Он спроектирован таким образом, чтобы при возникновении ошибки проверки он выдавал определенное исключение.У меня нет возможности изменить этот дизайн.

Каждая реализация получает входные данные валидации из набора входных данных по-своему и проверяет различное количество наборов данных.Однако для каждого входа проверки фактический код проверки одинаков.Вот почему я решил написать класс с validate методом, чтобы разместить этот общий код и вызывать его из каждой реализации Validator , когда это необходимо.Класс выглядит примерно так:

public class SpecificValidationService {

    public void validate (Condition condition1, Condition condition2) {
        if (conditionNotMet(condition1, condition2)) {
            throw new SpecificException();
        }
    }
}

Проблема в том, что наличие службы, имеющей только один публичный метод (который является недействительным), кажется мне неправильным.Как правило, я ожидаю, что служба будет иметь несколько методов, которые не являются недействительными.Я здесь?Какое имя должно быть лучше?Помните, что я не могу использовать 'validator', поскольку его можно спутать с реализациями Validator .Или, может быть, мой подход вообще неверен?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Нет конкретного определения класса обслуживания.Infact услуга может означать разные вещи в разных языках / рамках.В Java, как правило, любой класс, который реализует некоторую бизнес-логику, можно назвать сервисом.Нет ничего плохого в сервисе с единственной функцией void.Однако класс SpecificValidationService выглядит для меня скорее как служебный класс и может храниться на уровне обслуживания.В этом случае вы можете назвать его SpecificValidationUtility.

Я хотел бы поделиться этим ответом https://softwareengineering.stackexchange.com/a/343213 для пояснения по уровню обслуживания.

0 голосов
/ 26 июня 2018

Давайте сначала уточнить, что нет ничего плохого в методах void и нет абсолютно ничего плохого в том, что классы имеют только void методы.

Сам вопрос о том, имеют ли классы только void методов, которых следует избегать, неправильно ставить.Вопрос, который вы должны задать себе относительно своего плана или вашего class, выглядит следующим образом:

Соответствует ли этот класс моим требованиям?

Еслиответ - да, тогда не интересно, имеет ли он только метод void или нет.Если ответ «нет», вам нужно задать себе следующий вопрос:

Как бы выглядел этот класс, если бы он отвечал моим требованиям, и в чем разница между тем, каким он должен быть, и тем, чем он должен быть?это так?

И поскольку теперь вы задаете хорошие вопросы, у вас будет больше шансов найти хорошие ответы.

Я понимаю, что вам нужно interface дляваша проверка и вы хотите реализовать хотя бы метод.Это означает, что вам нужно от abstract class до implement вашего interface.

public abstract class AbstractValidator implements Validator {
    public void validate (Condition condition1, Condition condition2) {
        if (conditionNotMet(condition1, condition2)) {
            throw new SpecificException();
        }
    }
}

, а затем для каждого конкретного валидатора наследовать от AbstractValidator.Кроме того, документ на Validator, что он не предназначен для реализации ничем иным, чем AbstractValidator, так что другие люди, которые могут найти ваш interface, не сделают ошибку, реализовав его отдельно.

https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...