Выбор между служебным классом или наследованием от базовой активности

Это скорее вопрос, связанный с передовой практикой/производительностью, специфичный для Android (я понимаю, что это может быть общее обсуждение, но я хотел, чтобы оно было сужено с учетом среды Android).

Допустим, у меня есть метод (который проверяет условия и перенаправляет пользователя на различные действия). Этот метод используется во многих классах.

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

Or

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

Мысли ?

РЕДАКТИРОВАТЬ Это связанные сообщения SO, которые я проверил, связанные с этим. Не удалось принять решение на основе этих

Вспомогательные классы — это зло?

Если класс Utilities является злым , где я могу поместить свой общий код?


person RmK    schedule 24.06.2016    source источник
comment
я бы порекомендовал вызвать утилиту для выполнения вашей работы, а затем создать метод обратного вызова в своей деятельности, чтобы ответить на результат, ваш метод утилиты не должен знать о элементах пользовательского интерфейса   -  person Sarthak Mittal    schedule 24.06.2016
comment
@SarthakMittal Спасибо. Но что мне интересно знать, так это то, что помогло вам принять это решение использовать служебный класс, а не использовать базовое действие, перемещать туда методы и наследовать этот класс любым действием, использующим этот метод?   -  person RmK    schedule 24.06.2016
comment
я обычно оставляю процедуру наследования в качестве последнего средства, потому что мы можем расширить только один класс, лучше использовать интерфейсы, если только некоторые классы будут использовать метод, хотя, если все ваши действия будут нуждаться в методах, тогда все в порядке создать базовый класс   -  person Sarthak Mittal    schedule 24.06.2016
comment
Соглашаться. Одиночное наследование, безусловно, заслуживает рассмотрения. Но, как я уже упоминал в вопросе, мне было интересно, если это не проблема, какие другие факторы повлияют на мое решение перейти на служебный класс. В любом случае, эта ссылка была очень полезна, чтобы прийти к выводу - javarevisited.blogspot.com/2013/06/   -  person RmK    schedule 24.06.2016


Ответы (1)


Также будет возможность внедрить класс в конструктор, когда это необходимо. Когда вы используете этот подход, вы можете легко имитировать этот класс за интерфейсом, и с помощью макета можно создавать тесты.

Например, некоторый псевдокод:

Ваш Utility класс:

public class Utility implements IUtility {
    @Override
    public void add() { ... }

    @Override
    public void remove() { ... }
}

Ваш Utility класс использования:

public class UtilityUsingClass {
    private IUtility utility;
    public UtilityUsingClass(IUtility utility) {
        this.utility = utility;
    }

    public void myMethod() {
        // Use Utility class
        utility.add();
        ...
    }
}

В тесте это может выглядеть так:

@Test
public void testMyMethod() {
    UtilityUsingClass testClass = new UtilityUsingClass(new UtilityMock());
    testClass.myMethod();

    // assert stuff
}

UtilityMock:

public class UtilityMock implements IUtility {
    @Override
    public void add() { // Implements mock logic ... }

    @Override
    public void remove() { // Implements mock logic ... }
}
person Kevin Wallis    schedule 24.06.2016
comment
Спасибо. Я не уверен, что вполне понимаю, что вы имели в виду. - person RmK; 24.06.2016
comment
Здорово. Это проясняет ваш ответ. Что меня действительно интересует, так это то, что помогло вам принять решение использовать служебный класс, а не использовать базовый класс, перемещая туда методы и любой дочерний класс, наследующий методы от этого базового класса? - person RmK; 24.06.2016
comment
есть много причин, по которым некоторые из них перечислены на этом веб-сайте (javarevisited.blogspot.com/2013/06/), а также возможность тестировать и изменять введенные классы очень удобно. - person Kevin Wallis; 24.06.2016
comment
а также дано использование контейнера IOC. - person Kevin Wallis; 24.06.2016