これは実際には2つの質問だと思います-両方に答えようとします。
1)コードベース内の重複コードをどのように削減しますか。
これを行うことの利点を思い出すのに役立ちます。ビジネスロジックの重複によるバグが少なくなり、維持する必要のあるコードが少なくなります。他の回答で述べたように、これを起こさないようにする最善の方法はコミュニケーションを介することです。知識を適切に広めるためには、コードレビューの責任を平等に共有する必要があるという追加の注意事項とともに、コードレビューを使用することを強くお勧めします。開発者が既存の有用なコードが存在する問題を誰かが解決しようとしていることを認識できるように、毎日のスタンドアップも使用する必要があります。また、知識の共有を増やし、プログラマーの規律を保つのに役立つため、コードのペアリングも検討する必要があります。
また、できれば同じ部屋で開発者をできるだけ近くに置くことをお勧めします。共有ホワイトボードとスペースがたくさんあります。その後、一緒に食事に出してください。開発者が「結合」するほど、お互いのコミュニケーションが向上します。
ウィキまたはドキュメントコードに類似したものを使用することをお勧めします。規律ある開発者がどのようにドキュメントを作成しようとしても、元のコードからはずれます。より効果的なアプローチは、例のスタイルテストによる仕様の使用です。これらは、コードの使用方法を明確にする方法でコードを文書化します。誰かが例を変更せずにコードを変更すると、テストは失敗します。
すでに大量の重複コードを含む大規模なコードベースがあるため、おそらくこれをリファクタリングする作業を行う必要があります。カットアンドペーストされていない重複コードを見つけるのは難しい場合があります。それではなく、変更履歴を分析することをお勧めします。同時に頻繁に変更されるファイルを探します。これは、実際の重複コードを示さず、とにかくクリーンアップする価値がある場合、カプセル化の問題を示している可能性があります。コードの変更に対してバグ修正履歴を分析できる場合は、修正が必要になることが多い特定のホットスポットを見つけることができます。これらのホットスポットを分析すると、おそらくそれらの多くは重複するビジネスロジックが原因であることがわかります。
2)他のプロジェクトで使用できる共有ウィジェット、コンポーネント、ライブラリなどの作成にどのように取り組むべきか。
この場合、ビジネスロジックをラップするのではなく、有用なフレームワークコードを共有する必要があります。共有コンポーネントのセットを作成および保守するコストが非常に大きくなる可能性があり、どのインスタンスで実行する価値があるかを予測するのが困難になる可能性があるため、これはトリッキーなバランスになります。ここで提案するアプローチは、3つのストライキルールです。同様のコードを2回記述することを心配する必要はありませんが、3回目は共有コンポーネントにリファクタリングする必要があります。この時点で、それが有用であることを合理的に確信することができ、コンポーネントのより広範な要件についての良い考えを持っています。ここでは明らかに、開発者間のコミュニケーションが不可欠です。
共有コンポーネントをできるだけ多くオープンソースにすることを検討してください。ビジネスロジックではないため、競合他社に大きな利点はありませんが、追加のレビュアーとメンテナーを無料で獲得できます。