Использование шаблона Фасад - PullRequest
2 голосов
/ 16 марта 2012

При разработке веб-приложения java я немного запутался в использовании шаблона Facade или, точнее, могу сказать, что не могу визуализировать его точное использование.Вот мой пример использования:

У меня есть веб-приложение, в котором также есть классы действий, уровень служб и уровень DAO.Мои классы Action отвечают за взаимодействие с пользовательским интерфейсом (JSP), в то время как уровень обслуживания будет отвечать за обработку любой бизнес-логики, а также за взаимодействие с уровнем DAO и выполнение работы, связанной с БД.

Я могу создать уровень обслуживанияинтерфейс и может выставлять их в моих классах действий, так что мои классы действий могут взаимодействовать со слоем Service и выполнять любую работу.

Меня попросили представить другой слой как Фасад, где я должен представлять методы для своего Actionкласс, в то время как сервисный слой теперь выставляется на Фасаде.

Может ли кто-нибудь помочь мне уточнить, что спрашивают, правильно и какие преимущества получит этот подход, так как мне кажется, что введение дополнительного слоябез большой работы, выполняемой в слое фасада (тяжелый подъем все еще будет в слое обслуживания).

Ответы [ 4 ]

2 голосов
/ 16 марта 2012

В дополнение к тому, что написал @Tom, еще нужно подумать о транзакциях.Если вы хотите использовать несколько служб в одной транзакции, например, чтение из одной службы, запись в базу данных с использованием второй службы, вы можете сделать это с помощью одной и той же транзакции, если определите границы транзакций на уровне фасада.1002 * Вы правы в том, что в самом простом случае ваш Фасад будет делегировать прямо службе, но в более сложных случаях может оказаться полезным иметь дополнительный слой сверху.Особенно, если ваши услуги очень мелкозернистые, имеет смысл обернуть их более грубым слоем.Называете ли вы этот слой Facade или просто другим слоем обслуживания, тогда вопрос второстепенный.

2 голосов
/ 16 марта 2012

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

0 голосов
/ 23 октября 2016

Может ли кто-нибудь помочь мне уточнить, что правильно спрашивать, и какие преимущества получит этот подход?

Фасад предоставляет унифицированный интерфейс для набора интерфейсов в подсистеме. Шаблон фасада определяет интерфейс более высокого уровня, который упрощает использование подсистемы.

Фасад шаблон больше похож на помощник для клиентских приложений

Когда использовать:

  1. Для доступа к сложной системе требуется простой интерфейс.
  2. Абстракции и реализации подсистемы тесно связаны.
  3. Нужна точка входа на каждый уровень многоуровневого программного обеспечения.
  4. Система очень сложна или трудна для понимания.

Обратитесь к приведенному ниже сообщению, чтобы лучше понять шаблон с примерами рабочего кода ( TravelFacade, который помогает в FlightBooking, TrainBooking и HotelBooking ):

Что такое шаблон оформления фасада?

0 голосов
/ 22 октября 2016

Вот хороший пример картины Фасад

/* Complex parts */

class CPU {
    public void freeze() { ... }
    public void jump(long position) { ... }
    public void execute() { ... }
}

class Memory {
    public void load(long position, byte[] data) { ... }
}

class HardDrive {
    public byte[] read(long lba, int size) { ... }
}

/* Facade */

class ComputerFacade {
    private CPU processor;
    private Memory ram;
    private HardDrive hd;

    public ComputerFacade() {
        this.processor = new CPU();
        this.ram = new Memory();
        this.hd = new HardDrive();
    }

    public void start() {
        processor.freeze();
        ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
        processor.jump(BOOT_ADDRESS);
        processor.execute();
    }
}

/* Client */

class You {
    public static void main(String[] args) {
        ComputerFacade computer = new ComputerFacade();
        computer.start();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...