На моем рабочем месте мы планируем крупный рефакторинг нашего основного продукта - веб-приложение с несколькими «модулями». Я процитировал это, потому что это одна из наших главных проблем: модули на самом деле не являются модулями, все это монолитно. Приложение написано на PHP с умными шаблонами и использует Pear для доступа к базе данных MySQL. На самом деле нас не беспокоит независимость от базы данных, хотя было бы неплохо, если бы это не заняло бы месяцы.
Наша основная проблема заключается в том, что время / стоимость разработки увеличивается в геометрической прогрессии из-за ошибок, возникающих в несвязанных местах, и из-за отсутствия общей архитектуры, на которую можно полагаться, чтобы получить наиболее распространенную функциональность (каждый модуль в основном копируется / вставляется из предыдущего один, то адаптируйся).
У меня есть некоторый опыт работы с принципом веб-MVC, главным образом в ASP.NET MVC. Мне нравится чистое разделение и тестируемость. Однако при попытке сделать это на локальном компьютере приложение работает намного медленнее, чем должно быть.
Хорошо, достаточно введения, чтобы ответить на вопросы:
- Стоит ли полагаться на модули кеширования? Это удаляет большую часть накладных расходов, используя хорошую архитектуру? Что-то вроде APC.
- Приложение в основном читается. Запись в основном отдельных значений (изменить одно поле в записи). Любой OR / M для PHP, которые хороши в этом?
- Также ищем гибкий MVC-фреймворк. Я знаю Zend, CakePHP, может Symfony?
Сложность в том, что у нас нет такой роскоши, как возможность полностью переписать. Нам придется постепенно улучшать очень грязную кодовую базу. Это должно быть сделано во время написания нового кода или исправления ошибок. Одна вещь, которую я действительно, ДЕЙСТВИТЕЛЬНО хотел бы иметь, это написать регрессионный тест для новой ошибки перед ее исправлением, чтобы предотвратить ее повторное появление позже (это иногда случается).
Стек, который я сейчас рассматриваю, содержит:
- MVC рамки выбора
- Ведение журнала (log4php?)
- ИЛИ / М по выбору (не обязательно должен быть динамическим, генерация кода тоже подойдет)
- Контейнер IoC на выбор
- Smarty Templating, возможно, абстрагированный, так что мы можем его отключить, если потребуется.
- Кэш Opcode по выбору (мы используем один сейчас, забыл, какой, нужно спросить sysadmin)
Главное, что меня беспокоит, это влияние на производительность создания чистого кода на PHP. Видя, что это анализируемый язык, а не что-то вроде веб-стека .NET / Java, создание абстракций для другого встроенного кода (с обязательным разделением в разных файлах) может создать новые проблемы на другом уровне.
Примечание. Повторно помечайте, если вы найдете более подходящие теги, я не уверен в текущих.