Перейти к содержимому

Руководство разработчика по адаптеру совместимости с TCPDF

Адаптер совместимости — это миграционный слой. Он не скрывает устаревшее поведение, а делает его явным. Используйте его, чтобы приложение продолжало работать, пока вы переводите наиболее важные пути на нативные API NextPDF.

Используйте это руководство, если вы поддерживаете устаревший код в стиле TCPDF, расширяете покрытие адаптера или планируете поэтапную миграцию на нативные API NextPDF.

СлойПринадлежитЗона ответственностиНе размещать здесь
Устаревшее приложениеПриложениеПоддержание работоспособности существующих вызовов в стиле TCPDF во время миграции.Новые возможности PDF, которые должны использовать нативные API NextPDF.
Оболочка адаптераnextpdf/compat-legacyПредоставление класса в стиле TCPDF и общего состояния совместимости.Крупные семейства методов или логика преобразования.
Трейты областей ответственностиnextpdf/compat-legacyГруппировка устаревших семейств методов: текст, шрифты, изображения, безопасность, формы, страницы.Политика вывода, затрагивающая несколько семейств методов.
Классы-мостыnextpdf/compat-legacyПреобразование устаревших аргументов, мест назначения, цветов, единиц измерения и форматов.Поведение, зависящее от бизнес-логики.
Основной движокnextpdf/nextpdfСоздание нативного документа.Обязательства по поддержке совместимости с устаревшим кодом.
ЭтапПоведениеДействие разработчика
Начальная загрузкаНеобязательная начальная загрузка для устаревшего кода предоставляет имена совместимости.Используйте её только там, где устаревший код ожидает наличия символов TCPDF.
Создание объектаАдаптер сопоставляет устаревшие аргументы конструктора с конфигурацией основного документа.Сохраняйте входные данные конструктора стабильными во время миграции.
Вызов методаПоддерживаемые методы сопоставляются с поведением NextPDF через области ответственности и мосты.Прежде чем рассчитывать на паритет, проверьте покрытие методов.
Неподдерживаемая возможностьАдаптер выбрасывает явные исключения совместимости для неподдерживаемого поведения.Замените вызов или изолируйте его на уровне кода приложения.
ВыводМост вывода сопоставляет устаревшее поведение мест назначения с механизмом вывода NextPDF.Проверяйте имена файлов и корневые каталоги хранилища.

Начните со сбора всех вызовов методов TCPDF в вашем приложении. Классифицируйте каждый вызов, перед тем как менять поведение.

КлассификацияЗначениеДействие
Поддерживаемый метод адаптераМетод документирован как поддерживаемый и имеет тесты.Временно оставьте его, а затем мигрируйте, когда будете работать с этой областью.
Частично поддерживаемый метод адаптераМетод существует, но его поведение не полностью соответствует устаревшему TCPDF.Добавьте тесты с фикстурами и проверьте вывод вручную.
Явно неподдерживаемый методАдаптер выбрасывает исключение совместимости.Замените его нативным API NextPDF или удалите эту возможность.
Обёртка, специфичная для бизнес-логикиВ приложении уже есть обёртка для вызовов TCPDF.Сначала мигрируйте внутреннюю реализацию обёртки.
Вызов, критичный для соответствия требованиямПодпись, шифрование, тегирование, PDF/A, доступность или процесс выставления счетов.Мигрируйте на нативные API NextPDF и проведите отдельную проверку.

Добавляйте поддержку совместимости в самое узкое семейство методов, отвечающее за это поведение.

Тип измененияГде реализоватьОбязательный тест
Метод вывода текстаConcerns\AdaptsTextOutput или область ответственности шрифтов.Фикстура устаревшего поведения и проверка нативного вывода.
Метод страницы или полейОбласть ответственности страницы, позиционирования или полей.Тест преобразования координат и состояния страницы.
Метод изображения или рисованияОбласть ответственности изображений, рисования, цвета или градиентов.Тест проверки входных данных и visual/structural вывода.
Место назначения выводаOutputBridge.Тест сопоставления мест назначения и небезопасных путей.
Неподдерживаемая возможностьФабрика исключений или таблица покрытия методов.Тест типа исключения и его сообщения.

Если за это семейство отвечает трейт области ответственности, не помещайте крупный метод непосредственно в оболочку адаптера.

Используйте адаптер для стабилизации устаревшего кода, а затем переводите стабильные рабочие процессы на нативные API.

<?php
// Temporary compatibility code.
$pdf = new \NextPDF\Compat\Tcpdf\TCPDF();
$pdf->AddPage();
$pdf->SetFont('dejavusans', '', 12);
$pdf->Cell(0, 10, 'Invoice 1234');
// Target native shape.
$document = \NextPDF\Core\Document::createStandalone();
$document->addPage()
->setFont('dejavusans', '', 12)
->cell(0, 10, 'Invoice 1234');

Рассматривайте миграцию как последовательность небольших изменений поведения. Страница может продолжать использовать адаптер, пока отдельный раздел с высоким риском переводится на нативные API.

Точка расширенияИспользуйте дляОграничение
AdaptationConfigУправление поведением адаптера во время миграции.Сохраняйте значения по умолчанию явными и проверенными.
Трейты областей ответственностиГруппировка семейств методов, например текста, форм, изображений или безопасности.Добавляйте методы в соответствующую область ответственности, а не в оболочку адаптера.
Классы-мостыПреобразование устаревших форм аргументов в значения ядра.Покрывайте поведение мостов миграционными тестами.
CompatAdapterInterfaceАбстракция уровня адаптера для инструментов.Не используйте её в новом коде как замену нативных контрактов ядра.
Таблица покрытия методовЗапись о статусе поддержки для разработчиков.Обновляйте её при изменении статуса поддержки.
  1. Установите адаптер и запустите устаревший набор тестов без изменений.
  2. Откройте покрытие методов и классифицируйте каждый вызываемый метод.
  3. Сначала замените неподдерживаемые методы.
  4. Переведите пути с высокой нагрузкой или критичные для соответствия требованиям на нативные API ядра.
  5. Добавьте покрытие фикстурами для каждого мигрированного семейства методов.
  6. Удаляйте псевдонимы начальной загрузки, когда ни одна точка входа приложения от них не зависит.
СбойГде обрабатыватьРекомендуемая реакция
Неподдерживаемый методИсключение адаптера.Замените вызов или изолируйте его на уровне адаптера приложения.
Частичный паритет макетаМиграционные тесты и визуальная проверка.Задокументируйте принятое отличие перед развёртыванием.
Небезопасное место назначения выводаOutputBridge и политика хранилища приложения.Отклоняйте небезопасные пути и предпочитайте нативные API вывода.
Несоответствие функций безопасностиПлан миграции на нативный код.Не выпускайте для регулируемых выходных документов поведение, основанное только на совместимости.
Конфликт псевдонимов начальной загрузкиНачальная загрузка приложения.Удалите глобальные псевдонимы или ограничьте их областью устаревших точек входа.
Область ответственностиЗначение по умолчаниюКогда переопределять
Неподдерживаемые методыВыбрасывать явное исключение.Не ослабляйте это поведение в рабочей среде.
Устаревшие значения по умолчаниюЦентрализовано в LegacyDefaults.Переопределяйте только ради известного поведения миграции.
Сопоставление выводаПроходит через OutputBridge.После миграции используйте нативные API вывода.
Источник покрытияСтраница покрытия методов и тесты.Перезапускайте проверки покрытия после каждого обновления адаптера.
Строгий режимОставляйте включённым во время аудитов миграции.Отключайте только в рамках задокументированного окна совместимости с устаревшим кодом.
  • Сохраняйте фикстуру устаревшего поведения для каждого мигрированного семейства методов.
  • Добавьте один нативный тест NextPDF, прежде чем заменять устаревший метод.
  • Проверяйте, что неподдерживаемые методы выбрасывают задокументированное исключение.
  • Сравнивайте структуру вывода, когда точное побайтовое равенство не является реалистичной целью миграции.
  • Запускайте проверки покрытия методов после добавления или изменения методов адаптера.
  • Добавляйте тесты путей хранилища для каждого места назначения вывода, используемого устаревшим кодом.