Большинство существующих программных систем в какой-то момент в будущем станут устаревшими системами, но сроки будут другими. Хорошая система имеет хороший дизайн и развивается в течение своего жизненного цикла. Но ни один дизайн не может противостоять времени и изменениям, которые приносит бизнес.
Технологическое видение
Может быть, вы уже знаете, что такое BFF в моей предыдущей статье, а может быть, вы узнали об этом из других источников. Если нет, то позвольте мне кратко представить:Что такое лучший друг?
BFF
BFF, то есть бэкенды для фронтов, который используется в API проектирования серверов, а логика сервиса выполняется непосредственно на сервере.
![BFF)(http://architecture.phodal.com//images/bff.jpg)
Как я в "История развития интерфейса》 Как упоминалось в статье, когда мы проектировали системный API в первые дни, мы просто предоставляли JSON-сериализацию модели (Model) для внешнего интерфейса (Web, Android, iOS и т. д.) и специально не рассматривали потребности фронтенда. Ниже приведен обычный RESTful API, который по своей конструкции соответствует требованиям RESTful API, но не подходит для использования во внешнем интерфейсе.
В этом случае нам нужно сделать некоторую обработку, такую как усечение текста и так далее. Использование BFF означает, что у него будет дополнительный уровень бизнес-обработки и пересылки.
Применимая сцена
Как упоминалось выше, эта архитектура особенно подходит для миграции системы с использованием модели удушителя.
План миграции
Давайте вернемся в эпоху Web 1.0 и посмотрим на архитектуру веб-сайтов того времени:
Система выглядит такой простой, потому что не так много компаний пытаются работать в Интернете. Затем, более десяти лет назад, мы начали работать с мобильными устройствами и адаптировали слой API:
API, адаптированный из этого уровня, плохо спроектирован. Это может быть просто схема базы данных одна за другой:
CREATE TABLE contents (
`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY,
`type` varchar(255),
`title` varchar(255),
`author` varchar(255),
`body` text,
http://architecture.phodal.com/.
) TYPE=MyISAM;
Эти объекты преобразуются в JSON в коде, а затем передаются во внешний интерфейс. И по мере того, как взаимодействие веб-приложений становилось все более и более сложным, сторона ПК также начала активно использовать API вместо фонового рендеринга:
Раньше серверная часть напрямую возвращала значение из базы данных во внешний интерфейс, и каждый раз, когда значение менялось, приходилось изменять Android, iOS и Интернет. В то же время, когда нам нужно обработать строку, например ограничение в 140 символов, нам нужно реализовать это на каждом клиенте (Android, iOS, Web) отдельно, что, очевидно, довольно дорого. Итак, нам нужен BFF в качестве промежуточного программного обеспечения. В этом промежуточном программном обеспечении мы выполним некоторую обработку бизнес-логики:
И когда у нас есть этот уровень BFF, нам не нужно рассматривать миграцию серверной части системы. Изменения в бэкенде могут быть сделаны на слое BFF с некоторыми соответствующими модификациями:
Пока, мы реконструируем фронтенд и бэкэнд системы под новую архитектуру, а фронтенд и бэкенд вряд ли.
стратегия тестирования
Учитывая совместимость системы,
Возвращаясь снова к пирамиде тестирования, с новой системой, новым языком, старые модульные тесты обязательно недоступны. Тестирование услуг и тестирование пользовательского интерфейса совместимы, в зависимости от конструкции системы.
сервисный тест
Для серверной части мы по-прежнему читаем базу данных из системы, и результаты, отображаемые в конце, должны быть согласованными — это может быть просто другая база данных или метод чтения изменился с ODBC на JDBC. Для фронтенд-разработчиков в фоне ничего не изменилось — конечно, при отсутствии слоя изоляции BFF несколько запросов могут стать одним запросом.
Как мы столкнулись в приведенной выше системе, сгенерированный URL-адрес и заголовок страницы должны быть неизменными, поэтому нам нужно написать тесты для проверки соответствующего URL-адреса и заголовка:
title,url
Phodal's Idea实战指南,https://github.com/phodal/ideabook
一步步搭建物联网系统,https://github.com/phodal/designiot
GitHub 漫游指南,https://github.com/phodal/github-roam
RePractise,https://github.com/phodal/repractise
Growth: 全栈增长工程师指南,https://github.com/phodal/growth-ebook
Growth: 全栈增长工程师实战,https://github.com/phodal/growth-in-action
我的职业是前端工程师,https://github.com/phodal/fe
写给软件工程师看的硬件编程指南,https://github.com/phodal/make
Сначала напишите тест URL-адреса старой системы, а затем поочередно проверяйте согласованность содержимого.
поведенческий тест
Чтобы обеспечить совместимость старой и новой систем, нам необходимо провести автоматизированные тесты пользовательского интерфейса, чтобы обеспечить нормальную работу новой системы.
И если наши предыдущие UI-тесты были написаны с использованием архитектуры BDD, то мы можем продолжать использовать предыдущее поведение. При этом нам нужно только изменить реализацию тестового скрипта:
Возьмите огурец в качестве примера:
# language: zh-CN
功能: 失败的登录
场景大纲: 失败的登录
假设 当我在网站的首页
当 输入用户名 <用户名>
当 输入密码 <密码>
当 提交登录信息
那么 页面应该返回 "Error Page"
例子:
|用户名 |密码 |
|'Jan1' |'password'|
|'Jan2' |'password'|
Когда бизнес остается неизменным, это поведение также остается неизменным, потому что меняется базовая реализация. Как и раньше, идентификатор кнопки входаlogin
, теперь идентификатор кнопки может статьnew_login
.new_login
Определенно плохо сделанное имя, вероятно, все еще на следующем рефакторинге.new_login
.
Или Датчик от ThoughtWorks:
失败的登录
===
|用户名 |密码 |
|--------|--------|
|Jan1 |password|
|Jan2 |password|
失败的登录
-----------
* 当我在网站的首页
* 输入用户名 <用户名>
* 输入密码 <密码>
* 提交登录信息
* 页面应该返回 "Error Page"
кейс
Два года назад я работал над сайтом по поиску недвижимости. Это настолько старая система, что мы можем видеть комментарии 10-летней давности, когда исправляем ошибки. В то время мы приняли модель душителя, чтобы переписать систему, т.Добавляйте новые функции вне устаревшей системы, чтобы создавать микросервисы..
Поскольку это система, которая уже находится в сети, все равно необходимо убедиться, что старая функциональность не будет нарушена в процессе перезаписи. В старой системе есть необслуживаемая поисковая система.Чтобы заменить эту поисковую систему, мы создали слой сервисного уровня API - в слое API мы адаптировали старую поисковую систему и разработали новую поисковую систему. двигатель. В сегодняшнем представлении это своего рода реализация BFF, и метод миграции достаточно надежен.
в заключении
Тем не менее, нелегко напрямую внедрить BFF из устаревших систем. Нам нужно изолировать различные среды и сделать много технических приготовлений.