Имеет ли класс, содержащий только один метод, над выполнением принципа единой ответственности? - PullRequest
0 голосов
/ 03 апреля 2020

Я создаю простое приложение со списком задач на android, потому что хочу познакомиться с чистой архитектурой. Я наложил на приложение слой домена, данных и уровня представления, и вот следующий пример: https://github.com/android10/Android-CleanArchitecture

Когда я попытался выяснить, что такое домен для этого приложения Я спросил себя «о чем это приложение?». На что я отвечаю: «Речь идет о том, чтобы позволить пользователю создать группу и создавать задачи в этой группе», очень просто,

Поэтому я создал следующее:

Добавление групп в базу данных Room

public class AddGroupItemUseCase extends AbstractUseCaseCompletable<AddGroupItemUseCase.Params> {

    private final GroupItemRepository mGroupItemRepository;

    public AddGroupItemUseCase(GroupItemRepository repository,
                               PostExecutionThread postExecutionThread,
                               ThreadExecution threadExecution) {
        super(threadExecution, postExecutionThread);
        mGroupItemRepository = repository;
}

@Override
public Completable buildUseCaseCompletable(Params params) {
    return mGroupItemRepository.addItemToGroup(params.mItem);
}


public static final class Params {
    private final Item mItem;
    private Params(Item item) {
        mItem = item;
    }
    public static Params itemToBeAdded(Item item) {
        return new Params(item);
    }
}

}

Добавление задач в группу в базе данных Room:

public class AddGroupUseCase extends AbstractUseCaseCompletable<AddGroupUseCase.Params> {

    private final GroupRepository mGroupRepository;

    public AddGroupUseCase(ThreadExecution threadExecution,
                           PostExecutionThread postExecutionThread,
                           GroupRepository repository) {
        super(threadExecution, postExecutionThread);
        mGroupRepository = repository;

    }

    @Override
    public Completable buildUseCaseCompletable(Params params) {
        return mGroupRepository.addGroup(params.mGroup);
    }

    public static final class Params {

        private final Group mGroup;

        private Params(Group group) {
            mGroup = group;
        }

        public static AddGroupUseCase.Params groupToAdd(Group group) {
            return new AddGroupUseCase.Params(group);
        }
    }
}

Итак, возникает очевидный вопрос, нужно ли создавать эти классы одного класса one-method за каждую грубую операцию? Например, что, если я хочу узнать, сколько задач в группе? я должен создать класс с этим методом, чтобы соответствовать чистой архитектуре? кажется, что нужно создать много классов, но я думаю, что это имеет смысл из-за SRP, но тогда у вас будет много «функциональных классов», с которыми вам нужно поспевать,

есть мысли? спасибо!

1 Ответ

0 голосов
/ 03 апреля 2020

Абсолютно не один класс один метод. Ответственность в SRP не означает выполнение только одной задачи, это означает удержание всей ответственности в одном домене, выполнение всего в рамках одной задачи, которая не пересекается с другим классом. Таким образом, у вас может быть один класс, чтобы делать все с группами, и один класс, чтобы делать все с задачами. Вот как все обычно организовано.

Википедия: Принцип единой ответственности гласит, что эти два аспекта проблемы на самом деле являются двумя отдельными обязанностями и поэтому должны быть в отдельных классах или модулях. ... Причина, по которой важно сосредоточить внимание класса на одной проблеме, заключается в том, что он делает класс более устойчивым.

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