当社の製品には多くの場合同じ要件がありますが、ソリューションは常に新しく開発されます。異なる人々から、異なる良い結果と異なる品質で。特に私たちの製品のニーズのためのコードライブラリは良い考えのようです。
主な問題は、このライブラリを開発することではなく、すべてのプログラマにどのタスクについてすでに解決策があるかを伝えることだと思います。
私たちのような小さな会社ではこれは実現可能ですが、大企業ではどのように機能しますか?数百のメソッドを持つ大きなライブラリがある場合。
開発者は、すでに解決策があるため、問題の新しい解決策を開発する必要がないことをどのようにして見つけますか?
既存のソリューションが誤って新しく開発されるのをどのように防止しますか?
これを実現するには多くの方法がありますが、最も有用な方法の1つはコードレビューであり、あらゆる規模の組織で実行する価値のあるものです。コミットされたコードはすべて、少なくとも1人の他の開発者がレビューする必要があります。その後、元の作者にフィードバックを提供し、改善方法を提案します。これらの発言には以下が含まれます。
コードレビューと一般的にはtalkingが良いです。しかし、私は根本的な仮定に挑戦します。
コードを共有するにはnotを試してください。
本当に、あなただけのコードを書いてみませんか?.
あなたが共通のライブラリを持っている場合、可能性が高いのは、仕事をよりよくし、多くの人々によって維持されているサードパーティのライブラリがすでにあることです。 A.あなたが支払った賃貸料。とB.は、この1つの問題に専念し、それに対する再利用可能なソリューションを作成しています。
共通ライブラリが一般的でなくなったポイントまでトリミングします。
「大規模なライブラリがあり、数百のメソッドがある場合。」
これらを持っていない。 1つの作業を行う小さなライブラリを用意します。
「既存のソリューションが誤って新しく開発されるのをどのように防ぐのですか」
ソフトウェアの分割は、問題の分割と同じにしてください。つまり、ドメイン駆動設計またはマイクロサービス。問題に取り組んでいる場合は、その問題に固有のコードに取り組んでいます。他のコードについて心配する必要はありません。
同様のソリューションの再開発がgoodである理由は数多くあります。
コードを再利用するための探求は、創設以来 聖杯OOプログラミング です。
しかし、現在でも、同じ機能を何度も何度も書き換えています。
実際、問題は技術的なものではなく、文化的なものです。
これまで非常にうまく機能していたのは、パターンの再利用です。私たちはまだ自由に感じ、コードを作成しています。そして、パターンを再利用するのはクールです。誰もがそれについて話し、それはすべての高度なカリキュラムにあります。
うまく機能するもう1つのことは、標準ライブラリの場合の使用です。ここには、その使用を容易にする豊富なドキュメントがあります。これは語学研修に含まれているので、大きな認識があります。標準ライブラリはカスタムライブラリよりも信頼性が高いことはよく理解されています。次に、それを使用するための仲間の圧力があります。
カスタムの再利用可能なコードの問題は3つあります。
最初の問題は、コードレビューやドキュメントを通じて簡単に対処できます。他の多くの回答がこの点に対処しています。
残念ながら、2番目と3番目は、人々の認識と会社の文化に関連しています。これらの問題を直接克服し、人々を奇跡的に新しい信念に変えるためにできることは何もありません。
したがって、値に取り組む必要があります。再利用は再開発よりも経営者によって評価されることを人々に明確にしてください。既存のものについて交換する機会を提供します。
現在、すべての状況に適用できるわけではありません。しかし、ライブラリを製品にすることよりも魅力的なことは何ですか?社内製品でも、オープンソース製品でも、実際の製品でもカタログに追加されますか?
ライブラリの知識、ドキュメントの入手可能性、およびプロモーションは、従業員に適切なメッセージを伝えます。
製品としての可用性は、ライブラリコンポーネントを徹底的にテストするだけでなく、必要に応じて成功事例を伴う自社製品を促進することで、ライブラリコンポーネントを再利用する動機があることも明らかにします。
ライブラリを製品化すると、同僚はチュートリアルを行うことができますが、aleoは品質基準を上げることで、低品質のハードルを打破します。
私が追加できる他の唯一のものは、基本的にオープンソースコミュニティinsideを再作成することです。タイトな小さなライブラリに焦点を当て、テックスタック(NuGet for .NET、Maven for Java、NPM for JavaScriptなど)のパッケージマネージャーを利用します。ただし、このコミュニティをサポートするインフラストラクチャが必要です。基本的には、GitHubやAzure DevOpsに似たものをいくつか挙げるとします。これにより、開発者の時間を節約するためだけにコストが増加するため、バランスを取る必要があります。追加コストを相殺するのに十分な開発時間を節約できますか?
あなたは本当にこのインフラストラクチャを維持するお金と時間に見合うだけの価値のある共有コードを大量に必要とします。この時点で、コードで再利用可能なサービスに分解するという、Ewanが彼の回答で言及している方法を使用する方がコスト効率が高くなります。
すべての「共有」コードは、ライブラリ関数の数が少なく、数が少ない可能性があります。コピーと貼り付けはほぼ簡単でコスト効率が高くなります。