私が取り組んでいるプロジェクトの範囲は拡大中です。アプリケーションはかなり単純ですが、現在は非常に特定のニッチをターゲットにしています。近い将来、私はプロジェクトをフォークして新しい市場をターゲットにし、2 つのプロジェクトを並行して開発し続けるように依頼されました。
両方のプロジェクトは機能的に類似しているため、元のプロジェクトの根幹の多くを一般化する非常に強いインセンティブがあります。また、近い将来、より多くの市場をターゲットにしていると確信しています (市場は地理的なものです)。
問題は、プロジェクトの以前のメンテナーが、プロジェクトを元の市場に結び付ける多くの仮定を行ったことです。汎用コードを市場固有のコードから分離するには、かなりのリファクタリングが必要です。
物事をより複雑にするために、増え続ける市場のプロジェクトをどのように編成するかについて、いくつかの提案が飛び交っています。
- 各市場は個別のプロジェクトであり、プロジェクト間の共通点は共有ライブラリに移動され、プロジェクトは個別に展開されます。
- 既存のプロジェクトを拡張して複数の市場をターゲットにし、購入したライセンスに基づいて機能を制限します。
- 親アプリケーションを作成し、個別に購入したプラグインとしてプロジェクトを再設計します
3 つの提案にはすべてメリットがあります。理想的には、コードを柔軟に構成して、わずかな調整でこれらのいずれかを実行できるようにしたいと考えています。提案 3 は、プラグイン アーキテクチャを構築する必要があるため、最も困難なようです。最初の 2 つの提案は、もう少しもっともらしいです。
これらの異なるアーキテクチャの長所と短所について利用できる適切なリソースはありますか?
プロジェクト間でコードを共有することと、コピーとフォークを比較することの長所と短所は何ですか?