Хобрук: Ваш путь к мастерству в программировании

Лучшая практика для шаблона фасада приложения

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

У меня есть 1 фасадный класс, который размещен в службе и может вызываться клиентскими приложениями повсюду.

Этот класс фасада содержит такие методы, как

private void DoSomething()
{
  //insert to table1
  //insert to table 2
  //delete from table 3
  //more CRUD operations
}

И класс фасада в основном заполнен множеством других методов, подобных DoSomething().

Таким образом, клиент в основном создаст экземпляр класса фасада и получит доступ ко всем этим методам.

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

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


Ответы:


1

Что ж, Facade вполне подходит для архитектур SOA, поскольку он инкапсулирует подсистему в виде объекта и предоставляет вашему клиенту агрегированный интерфейс для всех бизнес-объектов и сервисов. Это также уменьшает связь в вашей архитектуре. Я думаю, что ваш подход не тяжелый и не повлияет на масштабируемость вашей системы.

05.10.2012
  • Итак, для класса Facade нормально иметь, например, 60 методов для инкапсуляции всей внутренней работы подсистем? 05.10.2012
  • Хотя такой подход снижает связность изложения вашего API, если он достигает четырех основных целей шаблона, я думаю, что все в порядке: 1) упростить использование, понимание и тестирование программной библиотеки, поскольку на фасаде есть удобные методы для общих задач. ; 2) сделать библиотеку более читаемой по той же причине; 3) уменьшить зависимость внешнего кода от внутренней работы библиотеки, поскольку большая часть кода использует внешний вид, что обеспечивает большую гибкость при разработке системы; 4) оберните плохо спроектированный набор API-интерфейсов одним хорошо разработанным API (в соответствии с потребностями задачи). 05.10.2012
  • Если ваш фасад упрощает использование вашей подсистемы, нет проблем с раскрытием такого количества методов, вот в чем идея. Очевидно, что если ваш фасад не t needs to persist some individual state per instance (and probably doesnt), вы будете реализовывать его как синглтон (это самый распространенный сценарий), что дешево. 05.10.2012
  • Я бы не беспокоился о том, насколько тяжелый класс, особенно если он не имеет состояния и может существовать как синглтон. Чем более слабо связан ваш API, тем проще его горизонтальное масштабирование. 10.10.2014

  • 2

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

    Если предположить, что эти методы не вызываются во время построения, они не должны влиять на «вес» объекта. Насколько я понимаю, метод, который ничего не делает, не требует памяти или циклов для практических целей.

    (как примечание, существуют технические ограничения, которые не повышают ценность вашего вопроса. см. Сколько методов может иметь класс C#)

    Заставьте свой фасад работать на вас! Хорошей практикой является предположить, что вы передаете его кому-то другому, и спросить: «Это точно описывает возможности моего API?». Шестьдесят звучит так, как будто это достигает верхних границ моих личных предпочтений, но это все еще только CRUD для 15 объектов.

    Думайте о фасаде как об унифицированном интерфейсе, который освобождает вас для создания более кратких и сложных Сервисов (которые, в свою очередь, должны инкапсулировать еще более краткие репозитории, которые, в свою очередь, должны инкапсулировать еще более краткие записи данных в таблицах, BLOBS в сегментах и ​​т. д.) .

    06.10.2012
  • Я знаю, что это немного устарело, но вы правы в том, что количество методов действительно не должно иметь никакого эффекта. Методы компилируются JIT, поэтому у вас может быть 100 методов, но вы можете использовать только 2. Таким образом, во время выполнения будут скомпилированы только 2 метода. 07.12.2014
  • Новые материалы

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..