Модуляризация кода с использованием фреймворков в iOS

Попытка найти лучший способ модульной структуры iOS. Это касается разработки SDK на таких языках, как Localytics, Instabug, Crashlytics и т.д...

Проблемой является совместное использование кода двумя разрабатываемыми SDK. то есть, если A и B являются SDK, приложение-потребитель для iOS будет использовать A и B отдельно, также A зависит от B.

Потребляющее приложение будет сбрасывать A и B, используя cocoapods. A и B создали подспецификации, и когда приложение добавляет модуль "A", и A, и B вытягиваются в рабочую область.

Как A, так и B имеют зависимость от сети, аналитики, ведения журнала, и только B дополнительно имеет зависимость от хранилища.

Одна из первоначальных разработанных архитектур заключалась в том, чтобы иметь платформу C, в которой будет размещен код, связанный с сетями, аналитикой, ведением журналов и хранением, так что A и B могут упоминать C как зависимость. Хотя это работает прилично, эта архитектура работает против принципа единой ответственности. Например: C содержит довольно много кода, и если фреймворк D хочет только хранилище, ему придется получить весь фреймворк C только для одного его компонента.

Второе архитектурное решение состояло в том, чтобы разбить фреймворк C на сети N, Analytics Y, Logging L и Storage S и создать систему на основе версий. Кроме того, A и B могут быть разделены на несколько небольших структур для поддержки принципов SOLID. Хотя это кажется небольшим бременем в плане обслуживания, я лично считаю, что это определенно правильный способ выполнения модульности независимо от стабильности модуля, существующей в Swift 5 или нет. Но одним из недостатков этой архитектуры является то, что когда приложение-потребитель добавляет модуль "A", все зависимости будут добавлены в приложение, и будут открыты открытые функции меньших платформ. Кроме того, если вы используете B внутри A и изменяется версия N, то и B, и A должны изменить версию N, поскольку две версии N не могут находиться вместе в одной кодовой базе.

Третий архитектурный проект должен был иметь общий код между A и B. То есть A и B будут иметь N, Y, L и S внутри них как классы, и они будут поставляться как две разные платформы. Недостатком этого является то, что если A использует B, а у A и B есть N, Y, L и S, то у нас будет дублирование кода, и SDK будут раздуваться.

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

0 ответов

Другие вопросы по тегам