Я работаю над достаточно крупным и полностью настроенным рубином для установки на рельсах. Я пытаюсь решить, как лучше всего его архивировать, чтобы я мог продолжать расти, не опасаясь, что он нарушит мои модификации.Forking vs overriding
В прошлом я следовал общей документации и внес изменения, используя декораторы, переопределяет и иногда переопределяет виды полностью. Это прекрасно работает, однако есть две проблемы.
1.) Может быть сложнее рассуждать о программе, когда классы открываются и расширяются через декораторы. Его гораздо проще, если вы можете открыть файл, например, Spree :: Product, и посмотреть на код, а затем проложить путь к предкам, а не знать, что в разных частях вашей системы класс открывается и модифицируется.
2.) Может быть сложно обновить Шпрее, если вы спуститесь по этому маршруту. Если вы переопределили представление и оно изменилось в следующей версии spree, вы не знаете. Все, что вы можете сделать, это обновить и надеяться, что один из ваших тестов или ручное тестирование подберет его, если он сломается.
Преимущество вышеизложенного, однако, конечно, это очень простой способ начать работу с изменениями, и если вы делаете небольшие и мелкие модификации, то, вероятно, это хорошо.
Однако существуют ли альтернативы? Один из подходов, который я рассматривал, - это просто форсирование Spree и внесение изменений непосредственно в кодовую базу разветвленного spree. Тогда я мог бы просто вытащить любые новые изменения из spree в свое раздвоенное репо, когда захочу обновиться. Преимущество этого подхода состоит в том, что git будет уведомлять меня, когда есть изменение в представлении, которое я переопределил. Затем я могу объединить это вручную и либо игнорировать его, либо принять меры. Кто-нибудь здесь сделал это на практике? Есть ли недостатки, которые я пропускаю?
Я думаю, что у вас будет много изменений, и вам придется разобраться в том, что вы изменили в сравнении с тем, что изменилось. Это, скорее всего, будет более болезненным, чем предположение, которое вы использовали. По крайней мере, вы можете написать тесты для каждого из методов, которые вы переопределяете, и посмотреть, все ли они проходят после обновления. Я бы лично не обновлял Шпрее, если не были доступны новые функции, которые мне нужны в программном обеспечении, и это обычно можно прогнозировать, глядя на предстоящие функции. Для одного из моих клиентов мы использовали более старую версию, чтобы сохранить одну и ту же кодовую базу в нескольких магазинах. – Rafal