4

私は、テレリック コントロール (v2009 q2) を備えた asp.net を使用して、データ駆動型アプリケーションをプログラミングしています。BLL という名前のクラスがあります。これには、ID をパラメーターとして受け取るさまざまなオブジェクトを返す静的クラス (ほとんどのみ) が含まれています。通常、オブジェクトのグループをリストとして返します。

私の質問は、常に静的を​​使用して、これに建築上の欠陥があるかということです。ビジネスレイヤーとデータアクセスレイヤーを別々のプロジェクトとして作成している人がいることを私は知っています。それがプロジェクトであることの利点は何ですか?だから私はより多くの機能を追加することができます。

前もって感謝します

4

6 に答える 6

2

エントリの方法として静的メソッドを使用することは、特に大きな問題ではありません。静的定義では状態情報を保存または分離できない場合があるため、状態を保存する必要がある作業領域があるかどうかに大きく依存します。幸いなことに、静的宣言を使用してからメンバー宣言に戻ることは、通常、その逆よりも苦痛が少なくなります。そのようなメソッドから返されたアイテムが状態に対して単独で責任を負う場合、これが問題として発生することさえないかもしれません。

個別のライブラリ/プロジェクトは、作業単位を分割するのに役立ちます。Dave Swersky が述べたように、特にマルチスレッド アプリでは、静的メンバー変数に癖が見られる場合がありますが、すべてを異なるライブラリに分離する必要があるという厳密な要件はありません。

個別のライブラリを使用すると、次の利点も得られます。

  1. 通常、プロジェクトの境界はソース管理の境界と一致するため、開発中の変更の分離が向上し、プラットフォームの表面全体でより多くの人が同時に作業できるようになります。
  2. レイアウトとインターフェイスに互換性がある場合、本番環境で個別に更新できる個別のパーツ。
  3. BLL か DAL かに関係なく、各レイヤーの特定のセグメントでどのような動作、機能、および役割が交差するかをより適切に整理します。一部の開発者は、特定の BLL で提供される項目に対してユーザーが操作できる内容に基づいて、コンポーネントを厳密に分離することを好みます。

ただし、一部の関係者は、大規模なモノリシック ライブラリの方が適していることを発見しました。このシナリオで重要な利点を次に示します。

  1. 古いコンポーネントと依存関係がめったに変更されないプロジェクトのコンパイル時間が短縮されます (特に C/C++ 開発者にとって重要です!)。集合的に変更されないソース ファイルはヒントとなり、コンパイラがプロジェクト全体の再コンパイルを回避できるようになります。
  2. 特定の場所に存在するオブジェクトの量を最小限に抑えることが重要なプロジェクト向けの、単一 (または少数) ファイルのアップグレードと管理。これは、個々のアイテムが順不同で公開または更新される可能性が低くなるため、他の関係者が使用するライブラリを提供する人々にとって非常に望ましいことです。
  3. Visual Studio .NET プロジェクトでの名前空間の自動レイアウト。サブフォルダーを使用すると、新しいコードを追加するために存在する最初の名前空間が自動的に暗示されます。特に素晴らしい特典ではありませんが、これが便利だと感じる人もいます。
  4. データベースまたはサーバーの抽象化による BLL と DAL のグループの分離。これはいくぶん中間点ですが、組織のレベルとしては、長期的な開発にはこのレベルの方が快適であることがわかります。これにより、保管場所や受け取り場所によって物を識別できるようになります。ただし、トレードオフとして、個々のプロジェクトはより複雑になる可能性がありますが、#3 で管理できます。

最後に、ネストされた静的クラスを実装しているように見えることに気付きました。あなたの作品を使用している他の人が、Intellisense または他の環境ショートカットを使用できない環境にいる場合、このセットアップを使用するのが非常に面倒であると感じるかもしれません。代わりに、いくつかのレベルのネストを個別の (またはネストされた) 名前空間に展開することを検討してください。これは、対象のアイテムを宣言するために必要な入力の量を減らすのにも役立ちます。静的なネストされたアイテムが毎回存在する必要がある場合、名前空間宣言は一度だけ存在する必要があるためです。あなたのカウンターパートはこれを気に入るはずです。

于 2009-11-18T21:56:43.303 に答える
1

BLLとDALが別々のプロジェクト(つまり、別々のアセンブリ)にあるということは、再コンパイルせずに異なるユーザーインターフェイスで使用できることを意味しますが、さらに重要なことは、DLLの境界インターフェイスと依存関係が比較的明確に定義されていることです(ただし、優れたデザインを保証します。少なくとも分離を強制します)。論理的に分離された単一のアセンブリを作成することも可能であるため、必須でも十分でもありません。

静的メソッドとビジネスオブジェクトクラスに関しては、これは異常であり、欠点がある可能性がありますが、レイヤーが分離されているかどうかには実際には影響しません。

于 2009-11-18T21:23:51.130 に答える
0

別のプロジェクトの利点の1つは、アプリケーションを更新する必要があるがBLLのみを変更する場合、変更を加え、DLLを再コンパイルして、アプリケーションがIISに展開されているbinフォルダーにドロップできることです。全体を再展開する必要はありません。ウェブアプリケーション

于 2009-11-18T21:26:05.703 に答える
0

アプリケーションがステートレスの場合、すべて静的なメソッド/クラスは問題になりません。ただし、アプリがマルチスレッドで、BLL が読み取りとコミットを行う場合、スレッド セーフの問題が発生する可能性があります。

于 2009-11-18T21:24:30.753 に答える
0

私の質問は、常に静的を​​使用して、これに建築上の欠陥があるかということです。

このアプローチの 1 つの欠点は、インターフェイスを静的メソッドに適用できないことです。考えられる回避策はシングルトン パターンを使用することですが、スレッド化の問題に注意する必要があります。

ビジネスレイヤーとデータアクセスレイヤーを別々のプロジェクトとして作成している人がいることを私は知っています。それがプロジェクトであることの利点は何ですか?だから私はより多くの機能を追加することができます。

利点:

  1. 複数の開発者が作業しやすくなります (環境とソース管理によって異なります)。
  2. ソリューションの残りの部分からロジック/保護レベルを強制的に分離
  3. BLL が大きくなった場合のグループ化と管理が容易
于 2009-11-19T03:49:36.407 に答える