デスクトップアプリケーションおよびWebプロジェクトで使用される可能性のある共有ライブラリの作成


7

私は過去1年ほどの間、私たちの会社で多数のMVC.NETおよびc#デスクトッププロジェクトに携わってきましたが、他のプロジェクトにも(もちろん、読み取り専用の学習能力で)鼻を突っ込んでいました。

このことから、さまざまなプロジェクトやチームにわたって、優れたインターフェースや抽象化に対してうまく設計された機能がたくさんあることに気づきました。私たちは時々私たち自身の仕事を好む傾向があるので、私はいくつかのプロジェクトがまったく同じクラスを持っていることに気づきました。もともとそれを書いた)

この事実については、時折プログラマーミーティングの1つで言及し、この機能の一部を企業のコアライブラリに組み込んで、長期にわたって構築して複数のプロジェクトで使用できるようにすることを提案しました。誰もが同意し、私はこの可能性を検討し始めました。

しかし、私はかなり早い段階で障害に遭遇しました。現在、私たちのチームは主にMVCに焦点を当てており、主に2.0にプロジェクトがありますが、3.0に分岐し始めています。また、いくつかの共有クラスや基本的なヘルパーメソッドの恩恵を受ける可能性のあるデスクトップアプリケーションもいくつかあります。

最初にこのDLLを作成するときに、すべてのプロジェクトタイプ(Web、クライアントなど)で使用できるいくつかの共有クラスを含めましたが、MVCアプリケーションでのみ役立ついくつかの共有モジュールの追加を検討し始めました。しかし、これは私が作成していたクラスのいくつかを活用するために、いくつかのMicrosoft Web DLLへの参照を含める必要があったことを意味しました(この段階ではMVC 2.0)。

今私の問題は、クライアントアプリケーションでも使用できるWeb固有のライブラリへの参照を持つ共有DLLがあることです。それだけでなく、DLLは最初にMVC 2.0を参照し、最終的にすべてのプロジェクトでMVC 3.0に移行します。しかし、このライブラリのクラスの多くはまだMVC 3などに関連していると思います

このDLL内のコードは、次のような独自の名前空間に分離されています。

  • CompanyDLL.Primitives
  • CompanyDLL.Web.Mvc
  • CompanyDLL.Helpersなど

だから、私の質問は:

  1. このような共有ライブラリを作成してもよろしいですか、またはWeb固有の機能が含まれている場合、特定のフレームワークまたはMVCバージョンのみを対象とする別のWeb DLLを作成する必要がありますか?
  2. 問題がなければ、たとえばMVC 3プロジェクトでMVC 2を参照するライブラリを使用するときにどのような問題が発生する可能性がありますか。ある種の互換性の問題、またはライブラリを使用している開発者がMVC 2.0ライブラリが必要であることに気付かない問題に遭遇するかもしれないと私は考えています。彼らはいくつかのジェネリッククラスなどを使いたいかもしれません

コンセプトは当時は良いアイデアのように思われましたが、おそらく実際的な解決策ではないのではないかと考え始めています。しかし、テスト済みのコードであることが証明されているため、プロジェクト間でクラスやメソッドがコピーされるのを目にした回数は、完全に正直であることに少し不安を感じます!

更新:私が採用したBernardsの回答に加えて、良いアドバイスのようです。ただし、MVC 2とMVC 3の両方のプロジェクトでおそらく役立ついくつかの共有クラスを作成したいと思います。ただし、最初に共有クラスを作成するには、共有アセンブリがMVCフレームワークの1つを参照する必要があります。

上記の第2四半期をさらに詳しく説明します。

  1. MVC 3 Webソリューションが必要な場合、MVC 3を具体的に参照するCompanyDLL.Web.Mvc3プロジェクトを共有する必要がありますか?これは、CompanyDLL.Web.Mvc2ソリューションからこの新しいMvc3共有プロジェクトにすべてのコードをコピーすることを意味しますか?

共有アセンブリの作成、および異なるフレームワークバージョンに対するビルドと参照の基本的な設計スキルが不足しているようです。または、それを吸い込んでCompanyDLL.Web.Mvc2CompanyDLL.Web.Mvc3CompanyDLL.Web.Mvc4などのライブラリを作成するだけの簡単な場合もあります...

回答:


5

異なるプラットフォーム(デスクトップとWeb)に個別の共有ライブラリを作成します。これらのライブラリの両方に必要なものは、別の共有ライブラリに配置する必要があります。したがって、これらのライブラリを次のように分割できます。

  • Company.Core:すべてのライブラリで使用されます。どのプラットフォームにも固有ではない、汎用コード、ヘルパークラスなどが含まれています。他の共有ライブラリを参照しません。
  • Company.Core.Desktop:デスクトップアプリケーションで使用されます。参照Company.Coreライブラリ。
  • Company.Core.Web:Webアプリケーションによって使用されます。参照Company.Coreライブラリ。

これにより、使用中のデスクトップテクノロジーに影響を与えることなく、使用中のWebテクノロジーを変更できます。これにより、将来的にプラットフォームを追加することもできます(例:)Company.Core.Mobile

これらのライブラリがユニットテストされていることを確認し、プロジェクト間でコードをコピーしないでください。


Bernardにアドバイスをありがとう。共有DLLで異なるバージョンのMicrosoftライブラリを参照する際の問題はどうですか?
dreza

同じライブラリの異なるバージョンを意味しますか?MVC 2対MVC 3?
バーナード

はい、これはまさに私たちが同じ状況でやったことです。完璧です。
gahooa

@バーナード。はい。私はMVC 2を参照に私たちの共有ライブラリを期待しかし、どのような場合には、このライブラリを使用する新しいプロジェクトはMVC 3を使用したいそれが問題だ場合は私もよく分からないが、私はの効果を知らない何かだろう
dreza

2
+1; MVCリリースの非常に特定の機能を使用しているのでない限り、それらは大部分が前方互換であるように設計されていると確信しています。
RichardW1001
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.