2011-09-25 11 views
6

申し訳ありませんが、これはしばらくの間私の心に残っています。私はすべての一般的な中間層オブジェクトのための再利用可能な企業名前空間(クラスライブラリ)を作成する過程にあります。このアセンブリは、プロジェクトの開発段階で、開発者が参照することができます。ここに私の質問です。すべての中間層ロジックで構成された単一のアセンブリを作成するか、この機能をより小さなアセンブリに分割する方が受け入れやすいでしょうか?再利用可能な社内ネームスペースを作成するときのベストプラクティス

例:単一のアセンブリ(名前空間の例)

システム

System.IO

System.IO.RegEx

System.Net

System.Net。メール

System.Security

System.Webの - AssemblyFull.dll

例:複数のアセンブリ

System.IO

System.IO.Reg - をAssemblyIO.dllにコンパイル

System.Net

System.Net - は、私は両方の方法を使用して、これをやったが、私は誰もが行うと、なぜ何を思ったんだけど、過去に

AssemblyNet.dllにコンパイル?私はコード例を探しているわけではなく、他の開発者が何をしているか知りたいだけです。

ありがとうございます。

+0

アセンブリにはすべてのものが含まれていればどのくらいの大きさですか?あなたの会社のプロジェクトですべての共通機能を使用すると思われますか?そうでなければ、論理的にそれを関連するサブユニットに分けることができますか(それは異なるアセンブリを組み込むための良い候補になります)? –

+0

Google再利用/リリース同等の原則 – driushkin

+0

リチャード - [完全]アセンブリは100種類のオブジェクトで構成されます。ほとんどのプロジェクトでは、公開された機能の75%〜85%が常に使用されますが、他の部分も引き続き使用できます。私の最初の考えは、あなたが述べたとおりにこれを処理することでした。最も広く使用されているオブジェクトを取り出し、共通のアセンブリに組み込み、他のオブジェクトを取り出して別々のユニットに分割します。しかし、一方では、単一のアセンブリが他の開発者の生活をより簡単にする方法を知ることができます。中間層アセンブリを参照し、それを使用するだけで済みます。私はこれが他の6から1半ダース感じている –

答えて

4

一般的に、明示的に結合されていないアセンブリを分離するために使用します。たとえば、低レベルのNetworking API、およびFTP関連の操作用の他のAPIを使用している場合、おそらく後者は前者に依存します。 APIユーザーにとっては、開発者。単一のアセンブリで両方を持つ必要はありません。おそらく1つのプロジェクトではFTP APIは必要ないため、コア「ネット」アセンブリだけを含める必要があります。できるだけアトミックになるようにAPIを分割し、小さな部分のみを使用する場合は大きなアセンブリを組み込むことを開発者に避けることができます。

このアプローチの欠点は、開発者がFTPアセンブリを必要とする場合は、Net 1も含めなければならないことです。それらの依存関係を管理する方法を見つける必要があり、開発者の複雑さが軽減されます。私はMaven (from Apache)を使ってJavaアプリケーションを実行していますが、今のところ私はよく分かりませんmaven-like alternative for .NET

しかし、あなたの会社のためにいくつかのAPIを構築している場合は、Wikiサイトやその他の軽量計量ツールを使用してこの問題に対処できます。

+0

Lorenzo - 迅速な対応に感謝します。私がMavenについて聞いたのはこれが初めてのことですが、かなりクールです。これについて私が思う以上に、私のオブジェクトを壊すことが最も理にかなっています。できるだけそれらをよく分けてください。開発者の1人が電子メール機能にアクセスする必要がある場合、実際に暗号オブジェクトが表示/アクセス可能な理由はありません。すべての迅速な回答の皆さん、ありがとう、私は本当に他人からの入力を取得していただきありがとうございます。プラス私は日曜日に働く唯一の人ではないことがわかります。 –

+0

@ lorenzo NuGet(www.nuget.org)は、Maven on .NETに近いところにあります。 – x0n

+0

@xOn Tks、Nugetを評価します。 –

1

私は彼らの答えは正しいとは思っていませんが、私はすべてのライブラリに共通の命名方法を使用する傾向があります。

私は多くのアプリケーションが使用するような一般的なタスクのような、中間層機能の多くを処理するライブラリを持っています。

Web.CreditCard
Web.CreditCard.Authorization
Web.CreditCard.Charge
Web.CreditCard.Batch

Web.Store.Order
Web.Store.Entities
Web.Store。カート
Web.Store.Auth

Web.User.Auth.OpenID
Web.User.Auth.OAuth
Web.User.Account
Web.User.Preferences

だから、あなたがそれらを再利用し、本当に速いそれらを識別することができ、どのタイプのプロジェクトの建物、それを問題ではありません。その中には独自のインターフェイスがあり、プロジェクトの要件に応じて機能を追加するために継承され、オーバーロードされる可能性があります。

+0

これは私が見ているものです私たちのリポジトリにあります。他の開発者にとっては、できるだけ簡単にしたいと思っていました。私はすべてのプロジェクトに使用される共通のアセンブリを進め、それほど共通しない機能のためにアセンブリを分離します。すぐに私に戻ってきた皆さんのおかげで、本当に感謝しています。 –

0

この質問に返信いただいた皆様、ありがとうございます。それぞれのプロジェクトは異なるので、正しい答えを出すことはほとんど不可能です。私はこれにどのようにアプローチするのかを説明します。まず

:私はビジネス/中間層のオブジェクトが前進すべてのプロジェクトで使用されようとしているかを特定する必要が

。これらが確認されたら、私は .common.utilまたは[会社] .commonアセンブリ[会社]を作成します。これらは現在および今後予定されているプロジェクトごとに参照されます。

第二:

より、プロジェクト固有のあるオブジェクトを識別します。これらのアセンブリは参照される場合とされない場合があります。例は[company] .security.cryptographyです。第三に

は、将来の開発者が適切に維持するために必要な知識を持ち、正しいアセンブリを参照するように、各オブジェクトが十分に立証されていることを確認してください。

私はすぐに私に戻ってきた皆様に感謝したいと思います。これは私の最初の投稿でしたが、すぐにもう一度ここにお会いできることをお約束します。再度、感謝します。

+1

私は1つは名前空間内で会社名を使うのが好きではありませんでした。私は以前はVerizonや多くの名前空間でVerizonと仕事をしていました。[氏名]今、会社のチャンクはもはやベライゾンと呼ばれていませんが、まだその名前空間が残っています。 –

+0

有効なポイント。私は通常、会社名を使用しています。なぜなら、通常、アセンブリのどこから来たのかを簡単に特定できるような統合を行っているからです。ジェネリック名前空間を作成していたら、トップレベルとして何を使用しますか? –

0

私は、再利用可能なファイルのために異なるアプローチを使用しました。

私はすべて再利用可能なコンポーネントが含まれて別の溶液を作成し、テストなど

各再利用可能な「もの」(クラス、関数、ユーザーコントロール、アイコンなど)は別のファイルにあります。

再利用可能な部分の機能が必要なプロジェクトは、ソースファイルに直接リンクするだけです。 (「既存のアイテムを追加する」、「リンクとして追加する」)。

  • だけで共通の機能のIを追加します。利便性のために私は

    このセットアップは私を可能にする(ファイルがリンクされているので、実際のユーティリティフォルダが空である)VSの「ユーティリティ」フォルダ内のすべてのリユース部品を配置します必要

  • ユーティリティで
  • バグ修正が自動的に次のビルドに含まれていない余分な依存関係

唯一の欠点は、手動で任意のDEPEを追加する必要がある場合追加された機能には次のようなものがあります。別の再利用可能なコンポーネントまたはアセンブリ)

私は別のアセンブリを使用していないので、名前空間は、単に機能を、次のとおりです。

  • Company.Utilites
  • Company.Utilites.WPF
  • Company.Utilites .IO
関連する問題