web-dev-qa-db-ja.com

古いコードにコード標準を導入する

私たちの主な製品はC++ MFCで書かれており、MFCと同じコード標準に従います。

次に、新しいコンポーネントの開発を開始し、同じ古​​い標準を引き続き使用する必要があるか、または最新のコーディング標準に従って最新のC++でそれを作成する必要があるかを検討します。

不利な点は、完全に異なるコードの記述方法が混在することです。新しいものと古いものの間のインターフェースでどのようにすべきですか?これについてあなたの経験は何ですか?正しい方法は何ですか?

2
magol

これはカプセル化が効果を発揮する場所です。

メソッドまたはクラスにカプセル化された機能があり、それが古いMFCスタイルで記述されていて、新しいスタイルのコードを使用してインスタンス化または呼び出しても機能しますか?維持する必要がない限り、その古いコードを見る必要はありません。

古いコードを本来あるべきブラックボックスのように扱ってください。


明確にするために、私はあなたが古いコードをそのままにして(結局それはテストされ、証明されている)、新しいスタイルを使用して新しいコードを書くべきだと思います。すべてが適切にカプセル化されている場合、同じコードベースに2つのコードスタイルがあることはまったく問題になりません。

ケースバイケースで、新しいスタイルのガイドラインに準拠するように、古いスタイルのコードを段階的に修正することを検討してください。クラスまたはメソッドでリファクタリングが必要な場合、または機能を変更する必要がある場合は、これを選択できます。

8
Robert Harvey

標準とパターンの主な目的は、開発者がコードを作成して操作する効率を向上させることです。

特定の方法でコードを記述し、特定の方法で表現されたコードを読み取ることを期待します。これにより、コードの記述方法の評価に費やす時間を削減し、解釈と理解を得るために費やす時間を削減します。彼らが読むコード。

これは、2つの理由で開発者にとって重要です。まず、コードにはあらゆる種類の動作(意図しない動作や予期しない動作を含む)が含まれる可能性があります。つまり、どのコードでも正確に(そしてすべきこと)を把握するには、多大な労力と経験が必要です。それは、単一の操作が何をするかという問題だけでなく、操作の集合またはシステム全体がどのように統合されるか、それが記述されている目標を満たしているかどうかという問題です。

第2に、まったく同じことを行う、または少なくとも同じ外部効果を持ち、同じ目標を達成する2つのコードセットは、ほぼ無限の数の方法で表現できます。 2つのコードが同じことを行うと判断するには、すでに理解している新しいコードを1つ作成するよりも、多くの労力と経験が必要です。

その場合、コードが完全な動作を理解するためにコードに多大な投資が必要なだけでなく、形式の違い(同等の動作であっても)が、違いが実際に形式のみであることを確認するために大きな投資が必要になる可能性があることは明らかです。

これらの問題は、コードを読んでいるのか、書き込んでいるのか、6か月前から読んでいる自分のコードであるのか、それとも他の開発者のコ​​ードであるのかと同じです。自分のコードを読んでいる場合を除いて、コードに入ったすべての部分的な記憶が残っている可能性があります。

これは、すべての開発者が自分の仕事(自発的なものを含む)でコードのパターンと標準を活用しようとする理由です。理解に費用がかかり、使い果たされた投資を行い、その結果を記憶されたパターンと標準に具体化するためです。奴隷的に(毎回完全に再分析することなく)は、コードの書き込みと読み取りにおいて妥当なペースを達成できる唯一の方法です(少なくとも、コードが有用で正しい場合)。

開発者は、既存の製品の標準の変更についていつ話しますか?

通常、彼らが最初から関与しておらず、製品に事前に投資していない場合や、製品をすばやく操作できるようにするパターンを理解していない場合。おそらく、関連するパターンを理解しておらず、彼らが賢明な投資をしていることを確認したいと考えています(特に、将来的に役立つパターンに)。あるいは、彼らはすでに別のパターンに多額の投資を行っており(おそらく、他の場所で使用されている、より新しいテクノロジーやツールによって可能になっている)、明らかに陳腐化したものに時間を費やすのではなく、そのパターンに従って新しいコードをすばやく作成したいと考えていますパターン。あるいは、おそらく別の雇用者のために、より良い基準で将来的に新製品を作成するために、新しいパターンに投資したいと考えているでしょう。

既存の製品の標準を変更する必要があるか、それとも混合して一致させる必要があるか。これは、元の規格​​が採用された理由、各規格の相対的なメリット(追加された複雑さ、統合の課題の可能性に対する導入)、新しい作業が古い作業から明確に分離されている程度、そしておそらくおそらく実際の全体的な印象に依存します。新しい標準への投資が適合する個人のキャリア目標。

問題の性質と判断を下す際に考慮に入れたいと思うことについて詳細に話すことを除いて、要約で答えることはほとんど不可能です。

2
Steve