私は過去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など
だから、私の質問は:
- このような共有ライブラリを作成してもよろしいですか、またはWeb固有の機能が含まれている場合、特定のフレームワークまたはMVCバージョンのみを対象とする別のWeb DLLを作成する必要がありますか?
- 問題がなければ、たとえばMVC 3プロジェクトでMVC 2を参照するライブラリを使用するときにどのような問題が発生する可能性がありますか。ある種の互換性の問題、またはライブラリを使用している開発者がMVC 2.0ライブラリが必要であることに気付かない問題に遭遇するかもしれないと私は考えています。彼らはいくつかのジェネリッククラスなどを使いたいかもしれません
コンセプトは当時は良いアイデアのように思われましたが、おそらく実際的な解決策ではないのではないかと考え始めています。しかし、テスト済みのコードであることが証明されているため、プロジェクト間でクラスやメソッドがコピーされるのを目にした回数は、完全に正直であることに少し不安を感じます!
更新:私が採用したBernardsの回答に加えて、良いアドバイスのようです。ただし、MVC 2とMVC 3の両方のプロジェクトでおそらく役立ついくつかの共有クラスを作成したいと思います。ただし、最初に共有クラスを作成するには、共有アセンブリがMVCフレームワークの1つを参照する必要があります。
上記の第2四半期をさらに詳しく説明します。
- MVC 3 Webソリューションが必要な場合、MVC 3を具体的に参照するCompanyDLL.Web.Mvc3プロジェクトを共有する必要がありますか?これは、CompanyDLL.Web.Mvc2ソリューションからこの新しいMvc3共有プロジェクトにすべてのコードをコピーすることを意味しますか?
共有アセンブリの作成、および異なるフレームワークバージョンに対するビルドと参照の基本的な設計スキルが不足しているようです。または、それを吸い込んでCompanyDLL.Web.Mvc2、CompanyDLL.Web.Mvc3、CompanyDLL.Web.Mvc4などのライブラリを作成するだけの簡単な場合もあります...