2017-12-26 7 views
0

私はC#アプリケーションを作成しています.3層プログラミングアーキテクチャに従いたいと思います。私はthis articleに基づいてアプリケーションをプログラミングしています。ドメインオブジェクトを3層に配置する場所#winformsアプリケーション

は私が誰かが私を助けることを願っていくつかの質問があります:私は、例えば(私はゲッターとセッターとコンストラクタを入れPersonクラスを、ドメインオブジェクトを入れてやる

  • をし、

  • DAL層の関数を1つのコントローラに呼び出すBLL関数をすべて1つのコントローラに入れるか、またはそれらのうちの1つを分離するかを指定する必要があります(例:age、name、..)。すべての特定のビジネスクラス(例:人、注文、..)?

  • DAL関数を呼び出す前にすべてのBLL関数でDALオブジェクトを作成する必要がありますか、または一度に1つのDALクラスオブジェクトのみを作成するシングルトンパターンを使用しますか?

私のクラスのスクリーンショット(Program.csのはメインクラスである):

class structure

+0

ほとんどのものと同様に、それは依存します。例えば、アプリケーションのサイズが大きくなると、 'Person'オブジェクトはレイヤーごとに大きく異なるようになります。ビューには、表示に必要なデータを保持する 'PersonViewModel'、ビジネスロジックに従って操作するためのBL内の' Person'エンティティ、およびおそらくは同じデータを表す 'PersonDTO'が存在する可能性があります。永続性のために最も有用です。 –

+0

BLの 'Person'エンティティから始め、ビジネスロジックによる操作のためのものであることに留意してください。データをビューまたは永続目的で操作する必要がある場合は、それらの目的に固有の別々のオブジェクトを作成し、アプリケーション間で適切な方法でマッピングします。 –

答えて

0
  1. 私は、これらのオブジェクトがされるよう、ドメインオブジェクトは、DALのフォルダ内に行くだろうと言うでしょうデータをオブジェクトのインスタンス内に格納する。
  2. すべてのBLL関数を1つのコントローラに配置することはお勧めしません。 「単一マシン、単一プロジェクト」であっても、3層アーキテクチャーの理由の1つは、コードの分離が容易で理解しやすく維持されることです。
  3. シングルトンパターンは、同じオブジェクトがすべてのBLL関数と共有されることを意味します。 DALの主な目的が単一の記憶域相互作用(例えば、データベース)を有する場合、複数のDALオブジェクトを有することは、リソース利用の懸念を意味する複数のデータベース接続を意味する。マルチスレッドの状況が発生していない場合でも、データベース接続プールのサイズを一定数に増やして、スレッドをスレッドと共有することができます。重要なことは、データベースから不要なリソースを要求しないことです。
0

さまざまな解決策がありますが、たとえば、コアプラットフォームは、「抽象化の神に対するより抽象的な」傾向であることを示しています。私は彼らが開発プロセス(クロスプラットフォーム、オープンソース)でこのように管理する方が簡単だと考えているからだと思います。

できるだけ抽象的な抽象化を行い、それがどのように快適であるかを確認してください。

私はエンティティ、サービスインターフェイスを1つのアセンブリに持っています。エンティティに格納されている "ビジネス"コード(インスタンスメソッドでも、静的メソッドでも、静的拡張であってもかまいません - それらの間に大きな違いはありません)。 POCOは「メソッドを含むことはできません」という意味ではありません。

関連する問題