php мульти версия класса - PullRequest
       4

php мульти версия класса

1 голос
/ 22 февраля 2011

Я хочу разработать систему модуля php, такую ​​как pypi или gems.Самая большая проблема - мульти версия класса.

В случае наличия модуля кеша, который зависит от другого модуля, обновляется модуль однодневного кеша, например, предыдущая версия 0.1, а теперь обновленная до 0.2.Модули, зависящие от этого модуля кеша, могут не работать так же.

Один из способов преодоления этой проблемы - ограничение модуля не может изменять API.Только можете добавить новый метод или изменить внутреннюю реализацию метода.но это все еще может вызвать проблемы, например: 1.0 работает нормально, когда обновление до 2.0, вызывает не очень хороший тест, приносит некоторые новые ошибки.

Многоклассовая версия является более предпочтительным способом решения этой проблемы.Но, кажется, трудно использовать php без пространства имен.или

class Cache1 {}
class Cache2 {}
//...

Это не очень удобно как для разработчика модуля, так и для пользователя.

Итак, какие предложения?


Редактировать

, если база данных и модуль аутентификации оба полагаются на модуль кеша, но БД полагаются на кэш 1.0, аутентификация полагается на кэш 2.0потому что кеш 2.0 добавляет несколько новых методов, если они являются двумя модулями и оба называются «класс Cache», будет ошибка типа «не может переопределить класс Cache».если просто обновить кеш до 2.0, модуль базы данных может сломаться (модуль базы данных может захотеть зависеть только кеш 1.0, потому что он просто работает)

Ответы [ 3 ]

0 голосов
/ 23 февраля 2011

Возможно, вы захотите сохранить метаданные модулей, включая номера версий зависимостей. Я думаю, что это лучшее решение, потому что существует множество других причин, по которым вы хотите отслеживать номера версий. Кроме того, если вы сделаете это, вы можете автоматически загрузить правильные (может быть более старые версии) зависимости.

О деле, я думаю, что первый вопрос о: Вы имеете в виду, что если у пользователя установлено несколько версий модуля, а другому модулю нужен модуль более старой версии, как с этим бороться? Я думаю, что вы, возможно, захотите предоставить код для включения правильных версий библиотеки и не включать (include_path?) Другие. Вы можете взять пример http://gembundler.com/ с открытым исходным кодом. Это действительно отличный менеджер зависимостей для rails.

0 голосов
/ 23 февраля 2011

Похоже, что основное решение заключается в том, что вам нужно внедрить некоторые стандартные модульные тесты, чтобы избежать проблем. И вы должны использовать систему контроля версий, чтобы вы могли вернуться к более старым версиям ваших файлов кода.

Так что я не совсем уверен, чего вы пытаетесь достичь, но вы могли бы сделать что-то вроде:

class Cache extends Cache1 { /* empty */ }

Код будет просто использовать класс Cache, который можно легко переключать для расширения нужной версии.

0 голосов
/ 22 февраля 2011

Я вижу два решения вашей проблемы:

  1. Обновление до PHP 5.3 и использование пространств имен (возможно, не вариант).
  2. Напишите много юнит-тестов (вам следуетв любом случае).

Честно говоря, модульные тесты должны достаточно эффективно CYA при работе над новыми версиями вашего программного обеспечения.Если что-то не поддается исправлению или новое изменение просто полностью нарушает тест, вы, по крайней мере, будете в курсе этого и сможете предложить своим пользователям руководство по миграции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...