Что такое мост в приложениях
Мост (Bridge) — структурный шаблон проектирования, который позволяет отделить абстракцию от реализации таким образом, чтобы и абстракцию, и реализацию можно было изменять независимо друг от друга.
Даже если мы отделим абстракцию от конкретных реализаций, то у нас все равно все наследуемые классы будут жестко привязаны к интерфейсу, определяемому в базовом абстрактном классе. Для преодоления жестких связей и служит паттерн Мост.
Когда использовать данный паттерн?
Когда надо избежать постоянной привязки абстракции к реализации
Когда наряду с реализацией надо изменять и абстракцию независимо друг от друга. То есть изменения в абстракции не должно привести к изменениям в реализации
Общая реализация паттерна состоит в объявлении классов абстракций и классов реализаций в отдельных параллельных иерархиях классов.
Представление паттерна с помощью UML:
Связь агрегации между классами Abstraction и Implementor фактически и представляет некоторый мост между двумя параллельными иерархиями классов. Собственно поэтому паттерн получил название Мост.
Формальное описание паттерна на языке C#:
Участники
Abstraction : определяет базовый интерфейс и хранит ссылку на объект Implementor. Выполнение операций в Abstraction делегируется методам объекта Implementor
RefinedAbstraction : уточненная абстракция, наследуется от Abstraction и расширяет унаследованный интерфейс
Implementor : определяет базовый интерфейс для конкретных реализаций. Как правило, Implementor определяет только примитивные операции. Более сложные операции, которые базируются на примитивных, определяются в Abstraction
ConcreteImplementorA и ConcreteImplementorB : конкретные реализации, которые унаследованы от Implementor
Client : использует объекты Abstraction
Теперь рассмотрим реальное применение. Существует множество программистов, но одни являются фрилансерами, кто-то работает в компании инженером, кто-то совмещает работу в компании и фриланс. Таким образом, вырисовывается иерархия различных классов программистов. Но эти программисты могут работать с различными языками и технологиями. И в зависимости от выбранного языка деятельность программиста будет отличаться. Для решения описания данной задачи в программе на C# используем паттерн Мост:
В роли Abstraction выступает класс Programmer, а в роли Implementor — интерфейс ILanguage, который представляет язык программирования. В методе DoWork() класса Programmer вызываются методы объекта ILanguage.
Языки CPPLanguage и CSharpLanguage определяют конкретные реализации, а классы FreelanceProgrammer и CorporateProgrammer представляют уточненные абстракции.
Таким образом, благодаря применению паттерна реализация отделяется от абстракции. Мы можем развивать независимо две параллельные иерархии. Устраняются зависимости между реализацией и абстракцией во время компиляции, и мы можем менять конкретную реализацию во время выполнения.
Что такое блокчейн мосты
Сами по себе блокчейн-сети абсолютно никак не могут обмениваться информацией и взаимодействовать друг с другом. Такая ситуация приводит к замедлению развития всей крипто-сферы.
Каждый блокчейн уникален, и у каждого есть свои особенности и функции. Не только это, но и большинство из них разрабатываются в изолированной среде и работают по разным консенсусным правилам. В результате у них нет возможности общаться с другими блокчейнами
Например, какое-нибудь децентрализованное приложение (dApp) работает в сети ERC20, данное приложение будет взаимодействовать с пользователями и использовать смарт-контракты только внутри одной сети. Для того чтобы приложение также взаимодействовало в другой блокчейн-сети, его необходимо воссоздать почти с нуля в новом пространстве.
При этом, такой вариант не решит основную проблему, так как, по сути своей, оно будет новым приложением, которое не будет взаимодействовать с аналогичным в сети ERC20.
Именно для решения данной проблемы существуют мосты между блокчейнами.
Мосты могут быть созданы для различных целей. Они не только позволяют использовать токен одной сети в другой, но также могут применяться для обмена любыми типами данных, включая вызовы смарт-контрактов, информацию от оракулов, такую как каналы цен на рынке и многое другое.
Оракул — алгоритм, который отслеживает определенные события и передает данные в блокчейн. Например, оракул может получать информацию с определенного сайта и передавать ее в сеть.
Мосты позволяют приложениям быть более децентрализованными, поскольку они не ограничены своей первоначальной сетью.
Блокчейн-мост — это соединение, которое позволяет передавать токены или произвольные данные из одной цепочки в другую. Обе цепочки могут иметь различные протоколы, правила и модели управления, но мост обеспечивает совместимый способ безопасного взаимодействия с обеих сторон.
Повсеместное использование мостов позволит приложениям опираться на сильные стороны разных блокчейнов. Различные DeFi приложения, при использовании мостов, выиграют от увеличения ликвидности и возможности создания сети сервисов, которые взаимодействуют друг с другом.
Для перевода токена из одной сети в другую с помощью моста, используется «обернутый токен» (Wrapped Token).
Обернутый токен — это специально выпущенный токен, привязанный к стоимости исходного токена. Он называется обернутым токеном, потому что исходный актив помещается в оболочку, в которой блокируется до того момента, как будет решено перевести токен в исходную сеть.
Для простоты понимания, обернутые токены можно сравнить со стейблкоинами, которые аналогично привязаны к курсу фаитной валюты.
Используя мосты, мы можем «обернуть» BTC, получить WBTC и использовать его в сети Ethereum. Аналогично, мы можем совершить обратную операцию и перевести WBTC в BTC.
Существует множество различных конструкций мостов, но их обычно можно разделить на два типа: более централизованные и более децентрализованные:
- Централизованные мосты полагаются на какой-либо тип центрального органа или системы для работы (например, биржа) — это означает, что пользователи должны доверять посреднику.
- Децентрализованные мосты — это те, в которых пользователям не нужно полагаться на один объект или орган управления. Доверие возлагается на математическую истину, встроенную в код.
Большинство мостов для передачи активов между цепочками блокируют активы в исходной цепочке и создают эквивалентное количество обернутых активов в блокчейне назначения.
Когда вы инициируете перенос активов из одного блокчейна в другой с помощью моста, активы фактически никуда не перемещаются и не отправляются. Вместо этого функциональность передачи используется в двухэтапном процессе и обрабатывается смарт-контрактом.
Предположим, вы хотите переместить токены из цепочки A в цепочку B. Что делают мосты — они временно блокируют или замораживают ваш актив в цепочке A. Затем создается эквивалентное количество новых токенов, которые будут разблокированы для вас в цепочке B. Когда вы хотите выкупить токены, то есть когда вы хотите переместить исходные активы обратно из цепочки B в исходную цепочку (цепочку A), токены, созданные в цепочке B, будут сожжены, а исходные активы будут разблокированы.
Активы в блокчейне A будут разблокированы только тогда, когда эквивалентное количество созданных токенов в блокчейне B будет сожжено или снова заблокировано. Это не позволяет пользователям одновременно использовать активы в обоих блокчейнах.
Концепция взаимодействия между цепями и передача токенов осуществляется с помощью двухсторонней системы привязки; где значение токена в любом блокчейне одинаково, поскольку оно остается привязанным к стоимости исходных.
Список проверенных мостов, с большим выбором сетей. Изучайте и выбирайте людей понравившийся:
В данной статье вы узнали чуть больше о работе и взаимодействии блокчейнов. Используя данную информацию, Вы можете самостоятельно распоряжаться своими активами в различных сетях, при необходимости.
Мост на C#
Мост — это структурный паттерн, который разделяет бизнес-логику или большой класс на несколько отдельных иерархий, которые потом можно развивать отдельно друг от друга.
Одна из этих иерархий (абстракция) получит ссылку на объекты другой иерархии (реализация) и будет делегировать им основную работу. Благодаря тому, что все реализации будут следовать общему интерфейсу, их можно будет взаимозаменять внутри абстракции.
Сложность:
Популярность:
Применимость: Паттерн Мост особенно полезен когда вам приходится делать кросс-платформенные приложения, поддерживать несколько типов баз данных или работать с разными поставщиками похожего API (например, cloud-сервисы, социальные сети и т. д.)
Признаки применения паттерна: Если в программе чётко выделены классы «управления» и несколько видов классов «платформ», причём управляющие объекты делегируют выполнение платформам, то можно сказать, что у вас используется Мост.
Концептуальный пример
Этот пример показывает структуру паттерна Мост, а именно — из каких классов он состоит, какие роли эти классы выполняют и как они взаимодействуют друг с другом.
Program.cs: Пример структуры паттерна
Output.txt: Результат выполнения
Мост на других языках программирования
Купи книгу Погружение в Паттерны и получи архив с десятками детальных примеров, которые можно открывать прямо в IDE.
Как применяется мост при проектировании приложений?
Мост (bridge) — это паттерн проектирования, который позволяет разделить абстракцию от её реализации. Он построен на основе композиции, то есть объединения нескольких классов для создания более сложного класса.
Мост применяется при проектировании приложений для повышения гибкости и расширяемости системы. Он позволяет абстрагировать интерфейсы от конкретных реализаций, чтобы можно было изменять или заменять реализацию интерфейса без изменения кода клиента. Этот паттерн применяется в различных областях, включая разработку пользовательских интерфейсов, компьютерных игр, веб-разработку и т.д.
Например, мост может использоваться при проектировании мобильного приложения для управления домашними устройствами. Абстракция — это пользовательский интерфейс, который включает в себя кнопки и ползунки для управления устройствами. Реализации — это конкретные устройства, которые могут быть управляемыми из приложения. Мост проектируется таким образом, чтобы клиентский код не зависел от конкретных реализаций устройств, и была возможность добавлять новые устройства без изменения кода интерфейса.