Book.od.ua Книги для вашего бизнеса



Одесская библиотека бизнес литературы
полезные книги для бизнеса

1.6. Пример простой интеграции

Продемонстрируем негативный эффект сильного связывания и способ его преодоления на конкретном примере интеграции. Предположим, что нам необходимо создать интерактивную банковскую систему, позволяющую клиентам перечислять средства на свой счет путем денежного перевода из другого банка. Для достижения такой функциональности интерфейсное Web-приложение должно быть интегрировано с серверной финансовой системой, управляющей переводом средств.
Наиболее простой способ объединения указанных систем заключается в использовании протокола TCP/IP. За последние 15 лет стек протоколов TCP/IP был включен практически во все операционные системы и библиотеки программирования. TCP/IP - это самый распространенный коммуникационный протокол, обеспечивающий передачу данных между миллионами компьютеров, подключенных к Интернету и локальным сетям.
Предположим также, что удаленная функция, зачисляющая средства на счет клиента, принимает в качестве параметров только имя клиента и сумму денежного перевода. Следующие строки кода вызывают указанную функцию с помощью протокола TCP/IP (мы выбрали в качестве языка программирования C#, однако данный пример выглядит практически идентично, будучи написанным на C или Java):
String hostName = "finance.bank.com"; int port = 80;
IPHostEntry hostInfo = Dns.GetHostByName(hostName); IPAddress address = hostInfo.AddressList[0];
IPEndPoint endpoint = new IPEndPoint(address, port);
Socket socket = new Socket(address.AddressFamily,
SocketType.Stream, ProtocolType.Tcp); socket.Connect(endpoint);
byte[] amount = BitConverter.GetBytes(1000); byte[] name = Encoding.ASCII.GetBytes("Joe");
int bytesSent = socket.Send(amount); bytesSent += socket.Send(name);
socket.Close();
Приведенный выше код создает сокет с адресом finance.bank.com и пересылает по сети два элемента данных (сумму перевода и имя клиента). Таким образом, десять строк кода заменяют собой сложное связующее ПО наподобие средств EAI или инструментария RPC.
К сожалению, указанный метод интеграции не лишен ряда существенных недостатков. Одной из наиболее сильных сторон протокола TCP/IP является его широкая поддержка различными операционными системами и языками программирования. Однако же независимость TCP/IP от платформы справедлива лишь по отношению к передаче самых простых структур данных: потоков байтов. Чтобы преобразовать данные в поток байтов, в приведенном выше коде был использован класс BitConverter. Этот класс преобразовывает данные любого типа в массив байтов на основе их внутреннего представления в памяти. Подвох состоит в том, что внутреннее представление в памяти целого числа зависит от конкретной компьютерной системы. К примеру, платформа .NET использует для представления целого числа 32 бит, в то время как некоторые другие платформы - 64 бит. В рассмотренном выше примере по сети передаются 4 байт, которые представляют одно 32-битовое целое число. Система, использующая для представления целого числа 64 бит, считает из сети 8 байт и, таким образом, ''захватит'' часть байтов, приходящихся на имя клиента.
Кроме того, различные компьютерные системы используют для хранения целочисленных данных формат с разным порядком следования байтов - прямым (начиная с младшего байта) и обратным (начиная со старшего байта). Предположим, что система, использующая прямой порядок следования байтов, передает по сети 4 байт:
232 3 0 0
232 + 3 х 28 = 1000. Система, использующая обратный порядок следования байтов, интерпретирует полученную информацию как 232 х 234 + 3 х 216 = 3 892 510 720. Наш клиент стал настоящим богачом! Другими словами, предложенный подход может быть справедлив только при допущении, что все компьютерные системы используют для хранения целочисленных данных формат с одинаковым порядком следования байтов.
Второй недостаток указанного метода интеграции заключается в указании адреса удаленного компьютера с помощью DNS-имени (finance.bank.com). Для преобразования имени компьютера в IP-адрес существует служба DNS, однако что произойдет в случае перемещения функции зачисления средств на другой компьютер, принадлежащий другому домену? К тому же, если компьютер даст сбой, нам может понадобиться обратиться к другому компьютеру с другим DNS-именем. Каждый из указанных сценариев предполагает внесение изменений в существующий программный код. Зависимость кода вызова функции зачисления средств на счет клиента от адреса конкретного компьютера в сети нужно устранить.


Понравился материал? Поделитесь с друзьями!

<< Предыдущая статьяСледующая статья >>
1.5. Слабое связывание 1.7. Пример простой интеграции. Продолжение.





Убедительная просьба при использовании любых материалов Одесской электронной бизнес-библиотеки ставить активную ссылку на наш сайт. По всем вопросам касательно сайта пожалуйста пишите на почту
      Карта сайта