問題タブ [refactoring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
36 に答える
11988 参照

c# - C#用のReSharper 4+ライブテンプレートを使用していますか?

C#用のReSharper 4.0テンプレートを使用していますか?

これらを次の形式で共有しましょう。


[タイトル]

オプションの説明

ショートカット:ショートカット
使用可能な場所: [AvailabilitySetting]

マクロのプロパティ(存在する場合):

  • Macro1-値-EditableOccurence
  • Macro2-値-EditableOccurence

0 投票する
7 に答える
571 参照

refactoring - 悪いコードを良くする

私は、既存の悪いコードを良いコードに変更することに関する記事を読んでしまいました。参考までに、これは記事http://www.javaworld.com/jw-03-2001/jw-0323-badcode.html?page=1へのリンクです。

それは広く次のことについて話しました

  • コメントを追加

  • リファクタリングコード

    • 大きなクラスを小さなクラスに分割する
    • 大きな関数を小さな関数に分割する
    • わかりにくいコードを変更する
  • 階層化アーキテクチャを使用する

良いようです。このリストにあなたが出くわしたかもしれないアドオンはありますか?

0 投票する
9 に答える
597 参照

refactoring - 本当に悪いシステムの改善

本当に悪いシステムの改善をどのように始めますか?

単体テストの作成とリファクタリングを推奨する前に、私が何を意味するのか説明させてください。これらのテクニックを使用することもできますが、この場合は無意味です。

実際、システムは非常に壊れており、必要なことを行っていません。

たとえば、システムは送信するメッセージの数をカウントする必要があります。ほとんどの場合は機能しますが、場合によっては、メッセージ カウンターの値を増やすことを「忘れる」ことがあります。問題は、独自の回避策を持つ他の多くのモジュールがこのカウンターに基づいて構築されているため、カウンターを修正すると、システム全体が現在よりも悪化することです。解決策は、すべてのモジュールを変更し、独自の修正を削除することですが、150 以上のモジュールを使用すると、非常に多くの調整が必要になるため、余裕がありません。

さらに悪いことに、システム自体ではなく、人々の頭の中に回避策がある問題がいくつかあります。たとえば、システムは 1 つのメッセージ グループで 4 つを超える関連メッセージを表すことはできません。一部のサービスでは、グループ化された 5 つのメッセージが必要になります。会計部門はこの制限を認識しており、これらのサービスのメッセージをカウントするたびに、メッセージ グループをカウントし、それに 5/4 を掛けて正しいメッセージ数を取得します。これらの逸脱に関する文書はまったくなく、現在システムにそのようなものがいくつ存在するかは誰にもわかりません。

では、このシステムの改善にどのように取り組み始めますか? どのような戦略に従いますか?

いくつかの追加事項:私はこれに取り組んでいる一人の軍隊であるため、十分な数の男性を雇ってシステムを再設計/リファクタリングすることは受け入れられる答えではありません. そして、数週間または数か月で、目に見える進歩を実際に示す必要があるため、数年で自分でリファクタリングを行うという選択肢はありません.

技術的な詳細: システムは Java と PHP で書かれていますが、それはあまり重要ではないと思います。その背後には、Oracle と PostgreSQL の 2 つのデータベースがあります。コード自体が臭いという前に述べた欠陥に加えて、それは本当にひどく書かれ、文書化されています。

追加情報:

カウンターの問題は、同期の問題ではありません。counter++ ステートメントは、一部のモジュールに追加され、他の一部のモジュールには追加されません。手っ取り早い修正方法は、不足している場所に追加することです。長い解決策は、それを必要とするモジュールの側面のようなものにして、後で忘れないようにすることです。このような問題を修正することには問題はありませんが、この変更を行うと、他の 10 個のモジュールが壊れてしまいます。

アップデート:

グレッグ D の回答を受け入れました。アダム・ベレアのほうが好きだとしても、何を知るのが理想的かを知っても何の役にも立ちません。答えてくれてありがとう。

0 投票する
7 に答える
17090 参照

objective-c - Xcode にプロトコルを実装するためのキーの組み合わせはありますか?

Visual Studio でインターフェイスを実装するクラスを定義すると、たとえば

ISerializable を右クリックし、コンテキスト メニューから [ Implement Interface ] を選択すると、クラス定義に適切なメソッドが表示されます。

Mac 上の Xcode で利用できるこの機能のようなものはありますか? この方法でプロトコルを自動的に実装できるようにしたいと考えています。オプションのメソッドが生成されたがコメントアウトされている可能性があります。

0 投票する
2 に答える
706 参照

eclipse - Eclipse でアクセサー/ミューテーター メソッドの名前を変更しますか?

アクセサー/ミューテーターが取得/設定した変数がリファクタリングされたときに自動的に名前を変更する方法はありますか -> 名前が変更されました (Eclipse 3.4)?

0 投票する
20 に答える
3108 参照

coding-style - ハンガリー語表記を取り除く最良の方法は?

コア機能 (データベース ルックアップなど) を提供するために 200 の静的メソッドを持つ 1 つのクラスを使用する C# コードベースを継承したとします。そのクラスの多くの悪夢の中で、ハンガリー語表記 (悪い種類) が多用されています。

ハンガリー語表記を削除するために変数名をリファクタリングしますか、それともそのままにしますか?

すべての変数を変更してハンガリー語表記を削除することを選択した場合、どのような方法になりますか?

0 投票する
11 に答える
33716 参照

c++ - C ソースを C++ に変換する

かなり大きく (>300K)、かなり成熟した C コードベースを C++ に変換するにはどうすればよいでしょうか?

念頭に置いている種類の CI は、モジュールにほぼ対応するファイルに分割され (つまり、典型的な OO クラスベースの分解よりも粒度が低い)、プライベート関数とデータの代わりに内部リンケージを使用し、パブリック関数とデータには外部リンケージを使用します。グローバル変数は、モジュール間の通信に広く使用されます。非常に広範な統合テスト スイートが利用可能ですが、ユニット (モジュール) レベルのテストはありません。

私は一般的な戦略を念頭に置いています:

  1. C++ の C サブセットですべてをコンパイルし、それを機能させます。
  2. モジュールを巨大なクラスに変換して、すべての相互参照がクラス名によってスコープされるようにしますが、すべての関数とデータを静的メンバーとして残し、それを機能させます。
  3. 適切なコンストラクターと初期化された相互参照を使用して、巨大なクラスをインスタンスに変換します。必要に応じて、静的メンバー アクセスを間接アクセスに置き換えます。そしてそれを機能させます。
  4. 次に、問題のある OO アプリケーションとしてプロジェクトにアプローチし、依存関係が扱いやすいユニット テストを作成し、そうでない場合は個別のクラスに分解します。ここでの目標は、変換のたびに 1 つの作業プログラムから別のプログラムに移行することです。

明らかに、これはかなりの作業になります。この種の翻訳に関するケーススタディ/戦争の話はありますか? 代替戦略?その他の役立つアドバイスはありますか?

注 1: プログラムはコンパイラであり、おそらく何百万もの他のプログラムがその動作が変更されないことに依存しているため、大規模な書き換えはほとんどオプションではありません。

注 2: ソースはほぼ 20 年前のものであり、おそらく 1 年あたり 30% のコード チャーン (変更された行 + 追加された行 / 以前の合計行数) があります。言い換えれば、それは大幅に維持および拡張されています。したがって、目標の 1 つは保守性を高めることです。

[質問のために、 C++への変換は必須であり、C のままにしておくことは選択肢ではないと仮定します。この条件を追加するポイントは、「C に残す」という回答を除外することです。]

0 投票する
4 に答える
799 参照

vb.net - Visual Studio 2005 for VB のリファクタリング機能

Visual Studio 2005 で VB のリファクタリング機能を利用できる無料の優れたアドインを知っている人はいますか?

0 投票する
6 に答える
1545 参照

version-control - リファクタリングとマージの必要性の間の緊張をどのように処理しますか?

新しいバージョンを提供するときのポリシーは、VCS にブランチを作成し、QA チームに処理させることです。後者がゴーサインを出したら、タグを付けて製品をリリースします。テクニカル リリースを作成できるように、ブランチはバグ修正 (のみ) を受信するために保持されます。これらのバグ修正は、その後トランクにマージされます。

この間、トランクは主要な開発作業を見ており、リファクタリングの変更を受ける可能性があります。

問題は、(バグ修正のマージが成功するように) 安定したトランクを持つ必要性と、コードが別のメソッドに抽出された場合や別のクラスに移動された場合、通常はできないこととの間に緊張関係があることです。新しい機能を導入するときにリファクタリングする必要性。

私たちのポリシーは、十分な時間が経過してブランチが十分に安定するまでリファクタリングを行わないことです。この場合、トランクで変更のリファクタリングを開始でき、トランクとブランチの両方でバグ修正を手動でコミットする必要があります。

しかし、これは、開発者がトランクにリファクタリングの変更をコミットする前に、かなりの時間を待たなければならないことを意味します。これは、ブランチからトランクへの後続のマージを中断する可能性があるためです。また、バグをブランチからトランクに手動で移植しなければならないのは苦痛です。これは開発を妨げているように私には思えます...

この緊張をどのように処理しますか?

ありがとう。

0 投票する
14 に答える
1749 参照

unit-testing - どのようにリファクタリングしますか?

私は、他の開発者がどのようにリファクタリングを開始したのか疑問に思っていました。あなたの最初のステップは何ですか?自分のものではないコードをリファクタリングした場合、このプロセス (リファクタリング) はどのように異なりますか? リファクタリング中にテストを作成しますか?