0

私はプログラミングに不慣れなので、申し訳ありませんが、物事がはっきりしていません

クラスを作成しました

public class Users 
{
   public int ID { get; set; }
}

私の最初の質問は、3層設計の観点からこのクラスをどこに置くべきかということです

に入れるとBusiness layer、データアクセス層を更新する必要があるときに、UsersオブジェクトをData access layerこのように渡したいと思います。

sendDataToDB(List<Users);

データアクセス層では、VSがこのメソッドを生成します

public static void sendDataToDB(List<global::BLL.Users> newUsers)
{

}

しかし、次のようなエラーが発生します。

タイプまたは名前空間名'BLL'がグローバル名前空間で見つかりませんでした(アセンブリ参照がありませんか?)

今は、Usersオブジェクトを含む別のライブラリを作成し、3つのレイヤーすべてにそのライブラリへのアクセスを許可しています。

私はそれが物事を行う正しい方法だとは本当に思いません。だからどんな提案も素晴らしいだろう

4

3 に答える 3

0

これは本当に良い質問であり、私がまだ「2012 年なのに、なぜこれはまだ難しいのか?」と思う問題の 1 つです。

したがって、ユーザー インターフェイス、ドメイン / ビジネス ロジック、データ / 永続性の 3 層ソリューションがあります。理想的な世界では、ユーザー クラスを UI に表示し、ユーザー クラスとそのロジックを BL に定義し、それをデータ リポジトリに渡してデータベースに保存できるようにしたいと考えています。残念ながら、循環依存関係のため、3 層でこれを行うことはできません。

一般的な解決策は、AutoMapperのようなものを使用して、各層に (たとえば) User クラスの独自のバージョンを持たせ、層内の同様のオブジェクト間でマッピングすることです。AutoMapper のようなツールを使用すると、複雑なドメイン モデルをより単純な UI 表示タイプ クラスにマップできます。次に、ドメイン オブジェクト (他のオブジェクトで構成されている場合でも) を、特定のリポジトリが必要とするオブジェクトのタイプにマップできます - ここでも AutoMapper を使用します (ちなみに、AutoMapper を使用する必要はありません。マッピングが少なくなるだけです)。鈍い)。

もう 1 つのオプションは、おそらく 3 つの層から抜け出し、各「垂直」層に対して「水平」に使用できる 4 番目の「DTO」層を用意することです。私はそれらをマッピングする傾向があります。

新しいバージョンの EF では、EF によって作成されたクラスがすべて UI ビューに配置されますが、これは私には間違っていると感じており、私が知っていることではありませんが、うまくいく可能性がありますか?

他の人にも他の提案があると確信しています。これは興味深く見ます。

于 2012-05-11T21:32:38.283 に答える
0

User オブジェクトにデータが含まれているだけで動作がない場合、ユーザーに関連するデータをバンドルするデータ オブジェクトのようです。この場合、それはデータ オブジェクトであり、レイヤー間で渡すことができます。そのための別の名前空間またはアセンブリを作成することもできます。

参照: http://en.wikipedia.org/wiki/Data_Transfer_Object

于 2012-05-11T19:47:02.847 に答える
0

Layering のルールは、下位層は上位層のことを何も知らないということです。3 つの層すべてが特定のクラスを表示するには、最下位の層にある必要があります。これは一般に、データ アクセス レイヤーを意味します。この「ユーザー」は、ビジネス上の懸念事項となる可能性があります。

レイヤーに関するもう1つの問題は、通常、下位レイヤーが上位レイヤーに持っている依存関係(少なくとも他のレイヤーへの依存関係)を渡さないことです。たとえば、データ層に依存するビジネス層は、一般に、ビジネス層に関する層からデータ層を保護します...

これは、すべてのレイヤー間で共有する必要があるクラスは、3 つのレイヤーの外にある必要があることを意味します。

ビジネスクラスとデータクラスを持つことをお勧めします。ビジネス層は、Data クラスを取得し、それを上位層のビジネス クラスに変換する方法を知っています。たとえば、データベース内のデータのクエリ/更新に使用する Data.Users があるとします。ビジネス層はそれを使用してデータベースにクエリ/更新を行い、それを Business.Users に変換し、それを上位層に渡します...

いくつかの有用な階層化相互作用ルール: http://msdn.microsoft.com/en-us/library/ee658109.aspx#Step5

于 2012-05-11T20:36:15.023 に答える