Методы получения и установки в родительском классе - PullRequest
0 голосов
/ 17 мая 2011

У меня есть быстрый вопрос о наилучшей практике, и являются ли геттеры и сеттеры лучшим вариантом в конкретном случае. Случай, когда у меня есть класс 'A', создающий экземпляры классов 'B' и 'C'. Класс A содержит общедоступные методы получения и установки для доступа к классам B и C, чтобы данные были централизованы.

Это лучший метод или лучше передать данные в классы B и C через параметры?

Спасибо

Chris

Ответы [ 3 ]

4 голосов
/ 17 мая 2011

Лично я бы порекомендовал структурировать ваше приложение так, чтобы все данные, требуемые классами B и C, были переданы.Это устранит их зависимость от класса A и тем самым уменьшит связь и сложность;например:

public class A {
    private var b : B;

    public function A() {
        b = new B();
        b.someData = "some data that b requires";
    }
}

Затем вы можете улучшить это, удалив создание экземпляров класса B из класса A с помощью процесса, называемого Инверсия управления .Таким образом, вы делаете класс B зависимостью от класса A.

public class A {
    private var b : B;

    public function A(b : B) {
        this.b = b;
    }
}

Это позволяет внешнему клиенту заранее настроить экземпляр B, делая структуру вашего проекта более гибкой для последующих изменений:

public class Client {
    public function Client() {
        var b : B = new B();
        b.someData = "The Client is now Configuring B";

        var a : A = new A(b);
    }
}
0 голосов
/ 17 мая 2011

Короткий ответ: это зависит

Длинный ответ: если вы B и C классы инкапсулируете данные и / или функциональность, которая может быть полезна вне класса A, и A является «единственным» клиентом B иC, пусть они будут инстанцируемыми независимо от A и установлены в A с помощью сеттеров, подобных setA/setB.Таким образом, другие классы могут использовать B и C по любой причине.Вы также можете воспользоваться преимуществами наследования, когда экземпляры с расширенными функциональными возможностями вводятся в класс A во время выполнения (например, с помощью платформ Inversion of Control, как указано в JohnReeeves).

Если они имеют смысл только в контексте класса A,инкапсулировать функциональные возможности, которые непосредственно использует только A, скрыть их от внешнего мира и параметризовать с помощью методов / свойств класса A.Это дает вам свободу изменять реализацию B и C, чтобы ни один код снаружи не расстраивался.A является общедоступным интерфейсом, так сказать, B и C. являются внутренней реализацией.

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

Итак, подумайте о явной цели A, B и C, их отношениях друг с другом и с внешним миром и примите решение.

0 голосов
/ 17 мая 2011

Да.Таким образом, область действия классов B и C уменьшается и может быть доступна только через A.

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