2

ほとんどが VB で書かれたプロジェクトを継承しました。可能な場合はゆっくりと C# に変換しながら、VB にあるものを維持したいと考えています。これを行う唯一の方法は、別の C# プロジェクトを作成することです。ただし、これは依存関係と参照のために問題を引き起こします。循環参照が作成されるため、VBProject参照を使用することはできません。CSharpProject両方のプロジェクトが他方を参照できるようにする必要があるため、これは問題です。これを行うためのより良い方法はありますか、それとも VB で書いている (または完全に C# に変換している) のでしょうか?

また、これらのプロジェクトは同じソリューションにあります。参照やその他の簡単な方法を作成せずに、それらをインポート/使用できるようにすべきではありませんか?

4

4 に答える 4

3

循環参照を削除する必要はありません。

過去に言語 A から言語 B に変換するという同様の状況に直面したとき、言語 A のコードの一部をリファクタリングして、コード ベースの大部分から独立させることから始めました。次に、これらの分離された部分を言語 B に翻訳して統合し、メイン プログラムが新しいモジュールに依存するようにしました。最終的に残ったのはメインプログラムだけでした。

時間はかかりましたが、このボトムアップのアプローチは非常に効果的で、最終的にはよりモジュール化されたプログラムになりました。

于 2010-12-20T22:58:27.917 に答える
2

制御の反転は、このような移行を実行する際に非常に役立ちます。私は最近、テストされていないダクトテープの VB.Net コードに重要な機能を追加するように依頼されたときに、同様の問題に取り組みました。影響を受ける既存の機能を VB.Net から抽出し、ユニット テスト済みの C# アセンブリに配置したいと考えました。

クラスを新しいアセンブリに抽出したいが、元のアセンブリに依存関係が戻る可能性がある場合は、元のアセンブリの依存関係によって実装される新しいアセンブリにコントラクト インターフェイスを定義することで、これを無効にすることができます。

たとえば、VB.Net アセンブリにクラス Alpha、Bravo、Charlie があり、Alpha が Bravo への参照を持っているとします。Bravo を抽出したいのですが、Charlie への参照が含まれています。Bravo が関心を持つ Charlie のメンバーを含む C# プロジェクトで ICharlie というインターフェイスを定義します。VB.Net プロジェクトで、Charlie : ICharlie を変更します。Bravo を作成すると、タイプ ICharlie の依存関係が受け入れられます。

このアプローチの利点は、同じプロジェクトまたは一連のプロジェクト内であっても、テスト容易性です。クラス間の依存関係はよく知られており、実際の ICharlie 実装で設定することを心配する必要なく Bravo のようなクラスをテストできるように、モック/スタブで置き換えることができます。

于 2010-12-21T00:24:11.333 に答える
1

C# プロジェクトが VB プロジェクトに依存している間は、これを行うことはできません。

クラス/関数がスタンドアロンで、VB プロジェクトに依存しないように、VB.net プロジェクトから C# プロジェクトにクラスを抽出する必要があります。

これは私が毎日仕事で戦っているものであり、ゆっくりと光に向かって進んでいます (c#)

于 2010-12-20T22:56:11.700 に答える
1

特定の項目を新しい C# プロジェクトに抽出して参照できない場合は、すべてを書き直す必要があります。それが Web アプリケーション プロジェクトまたは Windows フォーム プロジェクトである場合、同じプロジェクトでハイブリッドを維持することはできません。Web サイト プロジェクトがある場合は、個々のページごとに言語を指定して、ハイブリッドを実現できます。ただし、これは非常に厄介であり、C# ですべてを書き直すか、VB での記述に適応するために時間を割く方がはるかに良いことに気付くでしょう。

于 2010-12-20T22:57:23.147 に答える