Подтвердить что ты не робот

Какие шаблоны для свободной связи вы используете больше всего?

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

4b9b3361

Ответ 1

Model-View-Controller.

Кроме того, вещи, которые мешают мне писать связанные приложения, - это не просто шаблоны:

  • Нейминг. Если я не могу легко думать о имени для своего класса, он либо не делает ничего, либо слишком много.

  • Тестируемость

    . Если я не могу легко издеваться над зависимостями моего класса, это связанный дизайн.

Ответ 2

Я часто использую шаблон Command. Это шаблон, который просто дает проект после проекта.

Ответ 3

Включение зависимостей с помощью spring является моим любимым. Кроме того, с maven это обычное дело, чтобы сделать это действительно аккуратным трюком, скрывающим все реализации модуля API. Поэтому, если ваш код имеет три модуля: "application-core", "externalsystems-api" и "externalsystems", вы можете заставить "приложение-ядро" зависящим только от внешних систем-api. Фактические реализации и все их зависимости могут быть полностью невидимы для модуля приложения-ядра. Это действительно обеспечивает гораздо более сложное разделение проблем и облегчает соединение.

Оптимальным является то, что IDE, загружающие эти настройки maven, применяют эти ограничения видимости. Таким образом, вы не сможете ссылаться на SQL, AXIS, JAXB или что-то еще в своем ядре приложения

Ответ 4

Я думаю, что одним из основополагающих методов является "Tell Do not Ask Principle, Law Of Demeter". Возможно, это не так, как DI, UI или другие шаблоны Desing, но я думаю, что объекты, которые подпадают под этот принцип, слабо связаны и хорошо делают одно.

"Держите его застенчивым, держите его сухим, расскажите другому парню"

Ответ 5

Некоторые из шаблонов, связанных с SOA (например, служебная шина) предлагают абстракцию на более высоком уровне и поддерживают разделение проблем между бизнес-сервисами и техническими службами. Свободная связь между услугами затем (возможно) поддерживается путем введения брокера или автобуса, который отменяет услуги в решении.

Ответ 7

Да, важными являются инжекция зависимостей и инверсия управления, но не забывайте о абстрактных Factory и реестрах.

Ответ 9

Инъекция зависимостей - это форма инверсии управления.

Spring Framework имеет большую базу Java-программистов, а также имеет реализацию .NET.

Ответ 10

Шаблон стратегии.

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

Из Википедии:

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

Ответ 11

Включение зависимостей и IOC отлично подходят для развязывания кода.

Dotnetrocks показать 362 предоставляет очень хорошие определения. Также смотрите соответствующий эпизод DNR TV, чтобы получить более четкое понимание.

Ответ 12

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

Для получения информации о преимуществах DI эти две презентации очень хороши: http://googletesting.blogspot.com/2008/11/clean-code-talks-dependency-injection.html http://googletesting.blogspot.com/2008/11/clean-code-talks-global-state-and.html

Для использования шаблона DI не требуется контейнер DI, но когда программа становится большой (десятки классов или множество областей), тогда контейнер DI может уменьшить количество шаблонов. На JVM мой выбор по умолчанию - Guice.

Ответ 13

Инверсия управления как общий стиль кода/архитектуры.

DI как механизм настройки IoC.

Локальные абстракции (я называю это "Идеальная разработка среды" - напишите, как будто у вас есть точная окружающая среда).

Объекты обычно обмениваются данными с использованием методов void и путем передачи данных, а не с помощью getters/seters.

Я никогда не использую зависимость напрямую в базовом бизнес-классе - он всегда абстрагируется от локальной абстракции, а явный мост связан с зависимостью.

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