SharePoint 2010 - ベストプラクティス:アセンブリを処理する方法[ディスカッション]

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/36107

質問

SharePoint用のプログラミング時のサーバル年度に進んでいる議論がある。

Visual Studioでは、SharePointソリューションを追加できます。これは、展開する.WSPファイルに変換されます。この.wspファイルには、必要なすべてのアセンブリファイルが含まれます。

どのようにしてください。イベントレシーバー、Feature Receiver、ASPXページ?

この.csファイルをSharePointフォルダ内に配置しますか? (このようにして、SharePoint Project Aswellから.dllを展開する必要があります)

またはすべてのコードロジックを1つの異なるプロジェクト(S)(クラスライブラリ)に移動しますか?

例えば2番目の例では、次のようなものです。

  • 右クリック、新しいアイテム、イベント受信機を追加
  • .csファイルを別のプロジェクトに移動
  • Elements.xmlファイル内部のアセンブリ情報を変更する

    最初の例ではこれらのファイルを移動しません。vs2010を追加してください。

    私はどのようにどちらを好むかを言っていません、私はただの入力を受け取りたいです。 「オプション2が悪い」と言ってはいけません。私は本当に理由を知りたいのですが、なぜそうではないのか知りたいです!

    ありがとう

    編集:

    私の質問ここでは拡張機能などとは関係ありません。

    SharePointソリューションに.csファイルが含まれていないことを確認しています。このようにして、この解決策についてGACに組み立てする必要はありません。

    例:customer.sps.intranet.Solution(= WSPを生成する解決策、空のSharePoint Project項目)を持っています。

    フィーチャとフィーチャーレシーバを追加するだけでは、.csファイルが生成され、(展開後)Globalアセンブリキャッシュ内にcustomer.sps.intranet.Solution.dllファイルが配置されます。

    これは何人かの人々が持っていたくないものです! (私は理解していません、それが私が意見を求めている理由です)。

    これを解決するために、このソリューションの内側にプロジェクトを作成します。 "customer.sps.intranet.logic"に、このソリューションにはすべての機能受信側CodeBehindファイルが含まれます。

    これは、 "Logic"プロジェクトにあるレシーバクラスを使用するように機能template.xmlファイルを編集する必要があることを意味します。 このように我々は「customer.sps.intranet.Solution」をきれいに保ち、それを包装にするためだけに使用します。そのため、 "customer.sps.intranet.solution.dll"という名前のGACにデプロイされたアセンブリはありません...代わりにcustomer.sps.intranet.logic.dllアセンブリがGACにデプロイされています。

役に立ちましたか?

解決

AAAH、ソリューションとDLLの永遠の質問。 :-)なぜ分割して、なぜそうではない、そしていつまで?私はATMがうまくいっていません、私は休暇中ですが、あなたが私に見てみるように頼んだように、私はちょうどいくつかの服用を奪い、そしてそれを服用します。だから私の答えは個人的な経験と眺めに基づいています。 (ごめんなさいSTACKEXHANGE)

Xは「後部のコード」を分割してUIを維持するには難しいコードをもたらします。 私が異なるプロジェクトで見たものは、経験の浅い開発者が「後ろのコード」(XML / ASPXの横にあるC#クラス)とうまく対応しないことです。 1つの特定のプロジェクトでは、1500行の「新規」ページ(すでに巨大なもの)を見ました。「編集」ページは基本的に新しいページのコピーアンドペーストでした。 これは「悪いプログラミング」であることを確認してください、それはアーティファクトの隣に後ろにコードを置くことに固有のものではありません。しかし、悪い習慣は変わるのが難しく、この作業モデルは物事を悪化させるのに役立ちます。この場合、CSクラスを最初にコントロールとして作成し、編集クラスのある種の継承クラスを持つことは、維持するのがより簡単でした。作成したら、ASPSページをこれらのクラスから継承させることができます。

Xは「後部のコード」を分割しないと、ロジックが多すぎる方法でクラスにつながります。 そのプロジェクトのもう1つのことは、編集ページとしての新しいページとして、外部SQLデータベースへの直接接続があることです。それらはコードとメンテナンスのオーバーヘッドを作成した直接SQL接続を使用しました。層状のアプローチが大いに役立ちました。

X階層化アプリケーションには別々のアセンブリが必要です。 まあ、階層化はいいです!あなたはそれのために別々のアセンブリが必要ですか?必ずしも。あなたはあなたの論理、データACCESレイヤなどをあなたのアセンブリ内の別々のフォルダ/名前空間でグループ化することができます。それらも層である。 「しかし、なぜ私はそれらを分割すべきですか?」 それは良い習慣になる傾向があります。どうして?その論理はDA層でのみ参照されるので、より深い論理(例えばSQL接続)の偶発的な使用を避けます。他の利点は、最上層を他の層で置き換えることが潜在的により簡単であるということである。別のユーザーインターフェイスまたはモバイルインターフェイスを紹介します。 あなたはそれをさらにプッシュし、より低いレイヤーをより一般的にすることができるので、後でそれらを使用することができます。それがNhiberNateとEFフレームワークを作成できる方法です。

x「それはいいですが、それはただのASP.NET開発です。」 rightですが、ReceiversのようにSharePointアーティファクトを開発するときに同じ原則とアイデアを使用できます。機能プロパティまたはフォルダのプロパティでパラメータ化できる一般的な受信機への道を動かさないのはなぜですか。ロジックの再利用はほとんど安定した解決策をもたらします。

X分離促進(単位)テスト。 より一般的なクラスなどを分離して作成し始めたら、インターフェイスとモデルを使用するにはもう長いストレッチではありません。これは、単体テストがより簡単にモックすることができるように、単体テストは実装がより簡単になることを意味します(実際にはTDDを使用する必要がありますが)。 MVCフレームワークを見て、そして物事がきれいに分離されているのか。これはSharePointにも機能します。

私の2c(そして変化;-))を要約するために、あなたは彼らのアーティファクトに直接潮汐の後ろにコードを使うことができますが、私は好みません。私は、自動的に一致する受信機とコードをアーティファクトに変更することよりも、再利用、一般的、およびテスト可能なコードのために行く(プロパティにフィーチャー受信者を追加するだけで)、そして場所を見つけるための楽しさ(私はVS2010の瞬間に使用されます)が最後に、それはあなたとあなたのプロジェクトが好むものについてのすべてです。 : - )

他のヒント

実際には、個人的には、SharePointソリューションからのファイルがプロジェクトの外で移動された解決策に遭遇したことはありませんでした。拡張方法、ベースイベントハンドラコード。動かない理由もあります。通常、VS 2010は、クラスが内部作業に装飾されているGUIDを使用して、ハンドラを接続するため、依存関係を正しく構築できます。 また、すべてのバイナリは、とにかく内蔵されているので、コード横(SP2010ではこれ以上のコードの後ろのコードはもうありません)はすでに組み込まれています。 SafeControl(Webパーツ、カスタムコントロールなど)を登録することに加えて、Visual Studioがあなたのパッケージに外部アセンブリを含めることができるので、彼は必ずしも実際のコードのアセンブリをスカウトすることはできません。手動で - 生産性の悪い。

これらは最初の反省です、もう少しのものであるかもしれませんが、下の規則:あなたはそれらの作品を再利用していません - それからそれらをよりよく提案することができます。むしろどのような機能を展開するか、どのような依存関係、フィーチャスコープ、アクティベーション注文などを計画しています。

それが役立つことを願っています C:\ Marius

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top