私は勤務先の会社のイントラネット開発者であり、過去5年間これを行っています。私のプロジェクトは、「イントラネット」ソリューション自体と「ライブラリ」ソリューションの2つのソリューションに分かれています。「ライブラリ」sln自体には、DAL、BLLなどを含むいくつかのプロジェクトがあります。それらを別のソリューションに保持した理由は、「たぶん」、いつか私のライブラリslnを他のプロジェクトでも使用できると思ったからです。 -あなたは私がすでに書いたコードを再利用することを知っています:)まあ、それは決して起こりませんでした。さて、すべてのプロジェクトを同じ.slnに入れるのはとても簡単なので、私はそれをやろうと思っています。それは賢明な状況ですか?もしあなたが私の立場にあったらどうしますか?
6 に答える
過去に、私は複数のソリューションで同じ「プロジェクト」を使用して再利用しました。実際には、ソリューションをプロジェクトのコレクションの「特定の」インスタンスと見なしています。
たとえば、単体テスト(独自のプロジェクトで)を実行するか、統合テスト(別のプロジェクトで)を実行するかによって、同じソフトウェア全体に対して異なるソリューションがあり、適切なソリューションを開きます。私たちがやろうとしていることのために。そうすれば、単体テストで通常のコーディングを行う場合、毎回統合テストコードを作成する必要はなく、その逆も可能です。
注意すべき唯一のことは、他の多くのプロジェクト/ソリューションに依存しているソリューションにプロジェクトを持ち込み、メインコードではなくサイドプロジェクトにあることに気付かずに、その中のコードを「誤って」変更することです。次に、それに依存し、実現しない他のプロジェクトの負荷を壊し始めることができます!
はい、できます!プロジェクト設定は特定のプロジェクトファイル(csproj、vbproj、...)に保存されるため、DALとBLLを再利用できます。また、依存関係もそこに保存されているので、問題なく実行できます。私はアドインインフラストラクチャを持っており、すべてのアドインパッケージに対して、いくつかのソリューションファイルに含まれているアドインホストが必要です。私はこれで問題を経験したことはありません。* .slnファイルをテキストエディタで開いて、その内容を確認します...プロジェクトへのリンクだけです。
ライブラリプロジェクトをイントラネットslnに追加するだけです。ライブラリソリューションはそのままにしておきます。
はい、私は個人的にすべて同じソリューションにそれらを追加します。つまり、他のプロジェクトのソリューションでライブラリの一部を使用する予定があるかどうかは関係ありません。コンパイルされたdllをそれらのソリューションに追加することも、既存のプロジェクトとして新しいソリューションに追加することもできます。 。
そうです、私はすべてを同じソリューションに追加します:GUIプロジェクト、ライブラリ、さらには単体テストです。ソリューションが信じられないほど大きくなった場合(20以上のプロジェクト、またはそれ以上)、それらを分割したほうがよいかもしれませんが、私はそのような大きなプロジェクトに取り組んだことはありません。
私は、ソリューションとプロジェクトを分離し、プロジェクトの大きなパンチといくつかのソリューションファイルだけを残しました。必要なすべてのプロジェクトを新しいソリューションに追加します。
利点は、ワークスペースに本当に必要なプロジェクトしかなく、他のすべてのソリューションでも変更されることです。欠点は、他のすべてのソリューションでも変更されることです。つまり、広く使用されているライブラリのAPIを変更した場合、互換性がない場合は他のすべてのソリューションを確認する必要があります。
私は2つの解決策を持っていることを好みます。どちらも(多かれ少なかれ)同じ構造ですが、2番目には、特定のプロジェクトに関連付けられていない再利用可能なインフラストラクチャコードのみが含まれています。重要なのは、プロジェクトコードに、本格的な銀行業務ロジックの横にフレームワークのようなもの(つまり、「IsNumeric()」文字列拡張メソッド)を含めるべきではないということです(「ライブラリ」を再利用しない場合でも)。これにより、物事がはるかに読みやすく、保守しやすくなります。
例えば:
解決策1:
- ProjectName.Core
- ProjectName.Infrastructure
- ProjectName.Application
- ProjectName.UI
- ProjectName.IntegrationTests
- ProjectName.UnitTests
と
解決策2:
- CompanyName.Core
- CompanyName.Infrastructure
- CompanyName.Application
- CompanyName.UI
- CompanyName.Tests
また、1つのソリューションに10を超えるプロジェクトが含まれないようにしています。それ以外の場合は、「プロジェクトのアンロード」と「プロジェクトのリロード」が無限に切り替わります。