Какой PHP-фреймворк для приложения по обработке данных из разных источников?
Я быдлокодер, делаю приложение (далее - апп) которое будет много умнее меня. По смыслу и архитектуре - ETL с пользовательским интерфейсом для диспетчеризации заданий.
Главная головная боль:
-колоссальное разнообразие источников данных (в основном REST API), объекты все примерно одной природы. Все источники несут единый интерфейс, между ними нужно легко переключаться в админке. Пример:
1.пользователь-блоггер может вести блог в битриксе или вордпрессе, в админке у него выбор между данными источниками. Но битрикс отдает пост в формате { id:"1", begindate:"01.01.1970 00:00:00", text:"foo"}, вордпресс как { id:"1", post_date:"1970/01/01T00:00GMT", post_text:"baz"}.
2. Вышла новая версия вордпресс, там поле post_text переименовали в post_content, значит теперь мы спрашиваем у пользователя в админке помимо выбора между битрикс или вордпресс, еще и версию системы, чтобы переименовывать это поле для бизнес-логики внутри задания
3. Пользователь ведет собственный быдлоблог на самописном быдлодвижке, мы пишем под него индивидуальный класс подключения custom_DAO_Igor.php (например стучимся напрямую в его бд) и кладем этот класс в папочку существующих источников. В админке (или файловой конфиге) теперь выбираем $dao_type = "custom_DAO_Igor" и задание при запуске понимает что нам нужен источник истанцсированный из вот этого вот специфичного класса (lib\dao\custom_DAO_Igor.php) внутри котого лежит единственный class Custom_DAO_Igor implements Post_Dao_Interface. -централизованное инстанцирование объектов (фасад / фабрика). Пример:
в десяти местах (или скорее всего неопределенно большом количестве) бизнес-логики нужно влазить в вордпресс и уточнять перечень тэгов, чтобы все они получали через фасад/фабрику ссылку на единое подключение, вместо того чтобы создавать десяток (больше) новых.
-задания примерно единой природы, но нужен контроль задания изнутри объектов (фасад управления?) Пример:
бизнес-логика может потребовать остановку исполнения задания, если встретится с некоторой ошибкой на уровне среды (сервер не отвечает 30 секунд).
или по требованию бизнес-логики гдето внутри задачи (post_text содержит Джигурда -> закрыть все подключения, записать в лог "зашквар" и удалить аккаунт пользователя).
При этом важно что остановка задания не означает окончание всего php процесса - диспетчер заданий должен получить сигнал об остановке через Фасад управления и перейти к следующей задаче по плану
Что уже курил: форумы, доки symfony и laravel. Как я понял все крупные фреймворки мне мало помогут, там народ пишет свои кастомные репозитории и подключения, потом описывает их в коде, это, конечно, реально когда у тебя их конечное количество, здесь же бесконечное количество разных, но с единым интерфейсом. Каждый раз вписывать в код что у тебя появился новый источник уберемся - хотим чтобы фреймворк просто мог потребовать инстанцирование по названию класса полученному в переменной типа app::singleton("custom_DAO_Vasily_3_0", $arParams); это главный вопрос, все остальные типа фасада управления я обойду архитектурно, если что.
Подскажите если знаете какой фреймворк справляется с этим из коробки.
Или кого-нибудь кто с этим уже сталкивался и может выступить как техэксперт по договоренности
так как я понимаю проблем создать сам объект через вызов по аргументу функции нет, то тут вылазит второй вопрос - порожденный объект не будет частью модели по фреймворку, со всеми вытекающими возможностями, а всего лишь неким частным объектом внутри описываемой системы.
может быть есть фреймворки которые могут включить REST API шный источник данных и вообще любой кастомный источник данных на уровень модели фреймворка? Даже не это вопрос, а есть ли такой фреймворк, который позволяет достаточно примитивный уровень доступа к данным коим является REST API использовать на уровне модели
DevMan, в части модели думал об этом, но боюсь это будет как четырехколесный велосипед, боковые колесики конечно полезны, но на каком-то уровне начнут мешать в виде пониженной производительности итп.
в части фреймворков спасибо это ценный ответ, можно ли еще вопрос. Мне в любом случае основа архитектуры приложения это IoC, что проще - взять простой фреймворк с IoC или попытаться самому реализовать свое IoC?
Честно не вижу смысла загонять себя в рамки фреймворка. Таких специализированных по моему мнению
нет. Ваша задача отлично ложится на RabitMQ . Вам потребуется скорее не фреймворк, а базовые принципы
проектирования / разработки. Понятие интерфейса и класса его реализующего .
Приблизительно будет так.
Пользователь Вася хочет опубликовать пост с темой и текстом таким-то
Слушатель КООРДИНАТОР из этого события Делает события
- Вася хочет опубликовать в ВК
- Вася хочет опубликовать в ОК
- Вася хочет опубликовать в ФБ
- Вася хочет опубликовать в АХЗ
Вот читал я ваше описание . По смыслу пилите мультипостинг .
Ваш пример с Джигурдой рулиться. Стоп текущий таск. Послать уведомление в шину .
Цензор его ловит. Ага это полная попа. БАН -> Задача Unpublish.
Так не вспомню, но спамеры приблизительно по такой схеме работают.
Одни боты ищут уязвимости.
Другие через дырку заливают посты / вирусы для дальнейшего роста сети.
Все в куче отдельных потоков.
Рулить многопоточностью на уровне отдельных воркеров/демонов проще чем форкать процессы из самого пхп
Как-бы фреймворк - это инструмент, а пользоваться инструментом должен мастер, который уже сотворит им чудо. Нет волшебной кнопки "Сделать хорошо". Ну раз вопрос в пыхоразделе, то логично взять Laravel, так как в нем проще всего быстро создавать такие чудные приложения. В нем из коробки есть все средства для этого.
grinat, вполне наглядный индикатор популярности, в реальности можно помножить на 10, или какой-то другой индекс, основанный на статистике лайкающий и не лайкающих пользователей.
profesor08, да полно давно заброшенных проектов с кучей звезд и форков - мейнтейнеру стало неинтерсно, фирма подедрживающее решение разорилоас либо закрыла направление и т.п., полно говяных проектов с кучей звезд - потому что евангелисты на всех конфах орут о либе/фреймворке. Не отображают эти звезды популярность. Я еще молчу про постоянные письма, вида пожалуйста примите участие в нашем говно проекте либо хотябы поставьте звезду