1

まず、大学で Java を学んで以来 (私は 2005 年 12 月に卒業しました)、OO の多いプログラミング言語でプログラミングしたことはありません。卒業してから、FoxPro 2.5 - VFP9 でプログラミングしています。現在、私が働いている会社は、すべての FoxPro アプリケーションを C# に変換することを推進しています。

このプロジェクトの私の部分は、レポート解析アプリケーションを変換することです。VFP9 では、5 ~ 6 のフォーム (新しい C# フロントエンドを作成して置き換えたため、いずれも引き継がれません)、すべての標準メソッドを含む単一のBaseクラス、および約 575 の個別のパーサークラスで構成されます。 (そのうちのいくつかは、いくつかのパーサー固有の変数/プロパティを設定し、必要な基本クラスを呼び出すだけです)。一部のパーサーには独自のカスタム メソッドが含まれており、基本メソッドとグローバル プロパティを引き続き使用および操作します。

今、私の質問のために...

設計の観点から、新しい C# フロントエンドが、新しい C# ベース/パーサー クラス ライブラリ (DLL) を呼び出す複数の実行可能ファイル (3 ~ 5 個の EXE) を生成することを望みます。私の最初の考えは、Base_Code.cs と他の 575 個の parser.cs ファイル (H1.cs、H2.cs、H3.cs など) を含む 1 つのソリューション/プロジェクトを作成することでした。ただし、同僚が H1.cs を更新している間に Base_Code.cs を更新している可能性があるため、各 .cs ファイルを他のファイルとは独立してビルドする機能が必要です。

これをどのように構成するのが最善ですか?1 つのソリューションを保持して 576 個のプロジェクトを作成するか、それとも別のチームが現在試みているのと同じ名前空間をすべて使用して 576 個のソリューションを作成するか?

基本コードと各パーサー (これらはフロントエンド アプリケーションから渡されます) 全体で使用するいくつかのグローバル変数/プロパティがあります。ファイル パス、ファイル名などは静的であるため、これを考慮する必要があります。デザインを考えるときも考慮してください。

例の編集**

C# フロントエンドは、基本的にキュー システムとファイル/ステータス ビューアーです。このフロントエンドは、1 日を通して収集したレポートを「キューに入れます」。リストの一番上にあるレポートによって、必要な DLL が決まります。フロントエンド アプリケーションと DLL は完全に分離されています。

例: H00001_2342318.MSG - これは H00001 DLL を呼び出します H00002_3422551.MSG - これは H00002 DLL を呼び出します

各 H00001、H00002 など (合計 575 個の DLL) は、BASE DLL にあるメソッドを使用します。

H00001 DLL を更新する必要がある場合は、575 個の DLL すべてを再構築せずに更新する必要があります。

4

2 に答える 2

0

576 のプロジェクトおよび/またはソリューションは、メンテナンスの悪夢です。製品スイート全体の 12 未満のソリューションにまたがるプロジェクトは、はるかに少ない (75 程度) です。これには、テスト、フレームワーク コンポーネントなどが含まれます。私がそれを維持する唯一の方法は、厳密な命名規則とパス規則、ソース管理、および自動化のためのスクリプトを使用することです。

テストといえば、単体テストの計画を立てる必要があります (グリーンフィールド開発は、このための絶好の機会を提供します。機会を逃さないでください)。テストは別のプロジェクトで行います。これが、各クラスに独自のアセンブリを与えるべきではないもう 1 つの理由です。理論的には、プロジェクト数を 2 倍にすることができます。

論理的に分離されたプロジェクトを持つ単一のソリューションから始めます (たとえば、機能/依存関係ごとに分割し、ライブラリごとにテスト プロジェクトを追加します)。

ソース管理により、チーム メンバー間の競合に関する懸念が解消されます。ソース管理を実行するための内部的な課題がある場合は、Team Foundation Services Online ( http://tfs.visualstudio.com/ ) を調べてください。セットアップは非常に簡単で、最大 5 ユーザーまで無料です。

プロジェクト間のより大きな切断が必要になった場合は、ローカル リポジトリで NuGet パッケージを使用して、異なる個別のコンポーネントを分離/バージョン管理することを検討することをお勧めします。これは私の最初のステップではありませんが、覚えておく価値のあるオプションです。

コメントから、現在、自律型ユニットの日常的な展開を行っているように聞こえます。

  1. これは危険に思えます。これは、コードの変更ではなく、構成/データによって駆動できますか?

  2. 576 個の完全自律型ユニットは、アプリケーション設計の問題のようです (再利用など?)

  3. 新しいコードを毎日展開する必要があると仮定すると、スクリプト言語 + DLR を使用すると、これが容易になる可能性があります。C# の動的コンパイルも可能です。

于 2013-09-04T17:14:15.707 に答える
0

あなたが望むのは「プラグイン」のようなアーキテクチャのようです。これにより、メイン アプリを再コンパイルせずに dll (アセンブリ) をドロップイン/更新できます。

http://code.msdn.microsoft.com/windowsdesktop/Creating-a-simple-plugin-b6174b62

と関連しています。

于 2013-09-04T16:53:43.993 に答える