問題タブ [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 投票する
8 に答える
1020 参照

refactoring - 気を失うことなくブランチでリファクタリングする方法は?

私は自分や他の人のコードを常にリファクタリングしています。トランクではなくブランチで作業している場合、特に定期的にトランクにマージしない場合は、非常に面倒なマージが発生することがあります(ブランチのコードはトランクからゆっくりとシフトし、人々がトランクを変更するとIこれをブランチに適用する方法を手動で理解する必要があります)。

私が知っている解決策はどちらかです

  1. トランクとの間で絶えずマージします-面倒なマージを減らしますが、なぜブランチで作業するのですか?
  2. 何かをリファクタリングする必要があるときはいつでも、トランクに切り替えて、そこでリファクタリングを行い、ブランチにマージします-リファクタリングごとに環境を切り替える実際のコストは莫大なので、これはあまり実用的ではありません。

職業はなんですか?

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

asp.net-mvc - MVC アーキテクチャを再利用します。ASP.NET MVC と .NET Winforms の 2 層の UI があります。

私の質問は抽象的に見えるかもしれませんが、そうでないことを願っています。アプリケーション、ASP.NET MVC サイトを開発し、後でこのアプリケーション用の Winforms クライアントを構築する任務を負ったとします。既存のアプリケーションからどの程度、どのように再利用できるでしょうか?

モデルを定義し、コントローラーとビューを定義しました。それらはすべてうまく機能します。

今、上司は Winforms クライアントを求めてきました。ビュー (ASPX ビュー) だけを再利用するのではなく、モデルとコントローラー (別のアセンブリに配置した場合) を再利用できることを望んでいます。

これはできますか?どのように?

0 投票する
3 に答える
2201 参照

.net - Visual Studio 2005 - 複数の属性を同時にリファクタリングしますか?

右ボタン>リファクタリング>カプセル化フィールドを使用して、毎回アクセサーを取得します。問題は、新しいクラスを作成するときに、10 個を超える属性を持つことができ、アクセサーごとに 1 つずつ実行するのに時間がかかることです。それらを作成するより速い方法はありますか?

お時間をいただきありがとうございます。

0 投票する
5 に答える
7660 参照

c++ - Eclipse での C++ リファクタリングのサポート状況はどうなっていますか?

実際に有用で、クラスの名前変更以上のことができる状態ですか?

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

c - グローバルからローカルへのリファクタリング。それらは静的である必要がありますか?

マルチタスク(RTOS)環境で動作するように「スパゲッティコード」Cモジュールをリファクタリングしています。

現在、非常に長い関数と多くの不要なグローバル変数があります。

1つの関数にのみ存在するグローバル変数をローカル変数に置き換えようとすると、ジレンマに陥ります。すべてのグローバル変数は、ローカルの「静的」のように動作します。たとえば、関数を終了して再入力しても、その値を保持します。

マルチタスクの場合、「静的」ローカル変数はグローバルから最悪です。それらは機能を再入力しないようにします。

すべての論理フローをトレースせずに、関数が可変値の再エントランスを保持するリレーであるかどうかを調べる方法はありますか?

0 投票する
5 に答える
3316 参照

c# - セマンティック マージ ツール

背景: 私の仕事では、SVN、C#、および VisualStudio を使用しています。私の仕事の一部には、定期的にグローバルな名前変更が含まれます。何かの名前を変更してから変更をマージすると、ビルドが壊れてしまうことがよくあります。

質問: 私の変更を見て、グローバルな名前変更に気付き、それをマージ中に他の人が行った編集に適用できるソリューションはありますか?

ほぼ同じ効果を得る別の方法は、ある種のリファクタリング ログであり、それを受信編集に適用します。

ツールが完璧である必要はありません。たとえ、私が編集したものを参照している編集の参照が価値があることに注意したとしてもです。

編集VS のリファクタリング ツールを認識しています。私が探しているのは、作業コピーをリファクタリングした後、マージする必要がある他の人々の編集に同じリファクタリングを適用できるものです。

理想的な解決策は、リファクタリングを行うときに未処理の編集がないことを確認することですが、それでは、他の人が次の 1 週間またはそれ以上何かを成し遂げることができなくなります。(次の週は 30 分ごとに同期する必要があるため)

0 投票する
25 に答える
11243 参照

refactoring - どのくらいの頻度でリファクタリングする必要がありますか?

数週間前に同僚とリファクタリングについて話し合ったところ、「早期にリファクタリングし、頻繁にリファクタリングする」というのは、コードが乱雑で保守不能になるのを防ぐ良いアプローチだと信じている少数派のようです。他の多くの人々は、それがプロジェクトのメンテナンス段階に属しているだけだと考えていました。

ご意見がございましたら、弁護してください。

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

asp-classic - リファクタリング「インクルードファイル地獄」

ASP クラシック プロジェクトのコードベースに慣れるのが本当に困難になっていることの 1 つは、インクルード ファイルの状況が混乱していることです。探していた関数が、まったく関係のないインクルード ファイルに含まれていることがあります。関数を見つける必要がある場合に関数がどこにあるかをより簡単に判断できるように、これをリファクタリングする方法について誰かアドバイスはありますか?

編集:私が尋ねるのを忘れたことの1つは、vbscriptには、ファイルが2回含まれるのを防ぐためのメカニズムがありますか? C の #ifndef のようなものですか?

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

java - 私のJavaコードを調べて、適切なパッケージ構造を提案するツールはありますか?

コードベースが大きいので、パッケージ構造をリファクタリングして、相互作用するクラスが同じパッケージに入るようにします。

クラス間の相互作用を調べて、相互作用の激しいクラスをグループ化できるツールを作成できるはずです。これらのグループ化は、パッケージの適切な階層を示唆する可能性があります。

そのようなツールは存在しますか?(オープンソースが推奨されます)。

0 投票する
29 に答える
5745 参照

refactoring - 生産コードを破棄して最初からやり直すのはいつですか?

私は、コード レビューを行い、これまで個人的に取り組んだことのない新製品の 1 つに新機能を追加する可能性について報告するように依頼されました。他人のコードを盗むのは簡単だということはわかっていますが、(できるだけ客観的であるように努めながら) 悪い状態にあると言えます。私のコードレビューからのいくつかのハイライト:

  • スレッドの乱用: QueueUserWorkItemおよびスレッドは一般的に多く使用され、スレッドプール デリゲートにはPoolStartやなどの有益でない名前が付けられていますPoolStart2。また、スレッド間での適切な同期の欠如もあり、特に UI スレッド以外のスレッドで UI オブジェクトにアクセスしています。

  • マジック ナンバーとマジック ストリング: 一部Constの とEnumはコードで定義されていますが、コードの多くはリテラル値に依存しています。

  • グローバル変数: 多くの変数はグローバルに宣言されており、たどるコード パスと発生する順序に応じて、初期化される場合とされない場合があります。これは、コードがスレッド間でジャンプする場合にも非常に混乱します。

  • コンパイラの警告: メインのソリューション ファイルには 500 以上の警告が含まれており、その総数は不明です。Visual Studio から、これ以上警告を表示できないという警告が表示されました。

  • 中途半端なクラス: コードはあちこちに手を加えたり追加したりしたため、以前に行ったことを忘れてしまったのではないかと思われるため、一見中途半端なクラスや空のスタブがいくつかあります。

  • Not Invented Here : この製品は、データ アクセス ヘルパー、エラー ログ ヘルパー、ユーザー インターフェイス ヘルパーなど、他の製品で使用される共通ライブラリに既に存在する機能を複製しています。

  • 関心の分離: 典型的な「UI -> ビジネス レイヤー -> データ アクセス レイヤー」の 3 層アーキテクチャについて読んだときに、誰かが本を逆さまに持っていたと思います。このコードベースでは、UI レイヤーがデータベースに直接アクセスします。これは、ビジネス レイヤーが部分的に実装されているものの、十分に具体化されていないためにほとんど無視され、データ アクセス レイヤーが UI レイヤーを制御しているためです。低レベルのデータベースおよびネットワーク メソッドのほとんどは、メイン フォームへのグローバル参照で動作し、フォームを直接表示、非表示、および変更します。かなり薄いビジネス層実際に使用される場合、UI を直接制御する傾向もあります。この下位レベルのコードのほとんどは、MessageBox.Show例外が発生したときにエラーメッセージを表示し、ほとんどが元の例外を飲み込みます。もちろん、これにより、リファクタリングを試みる前に、プログラムの機能を検証するために単体テストの作成を開始することが少し複雑になります。

ここではほんの表面をなぞっているだけですが、質問は単純です。時間をかけて既存のコードベースをリファクタリングし、一度に 1 つの問題に焦点を当てた方が理にかなっているでしょうか、それともすべてをゼロから書き直すことを検討しますか?

編集:少し明確にするために、プロジェクトの元の要件があります。そのため、最初からやり直すことがオプションになる可能性があります。私の質問を別の言い方をすると、次のようになります。コードを維持するコストが、ダンプして最初からやり直すコストよりも大きくなるポイントにコードを到達させることはできますか?