0

私はこのアーキテクチャを持っています:

------(WPF APPLICATION)(XAML,ViewModels) (ビジネス ロジックは知っているが DAL は知らない)

------(クラス ライブラリ)(ビジネス ロジック) (DAL を知っている)

------(クラス ライブラリ)(DAL - エンティティ フレームワーク (モデル ファースト))(誰も参照しない)

ここでの私の問題は、私のDALがビジネスロジッククラスを認識していないため、たとえばPersonのリストを取得すると、DALでIEnumerableを返すことです。例えば:

public static IEnumerable GetPersons()
  {
       using(StaffEntities context = new StaffEntities())
       {
            return context.Persons.ToList();
       }

  }

したがって、ビジネスロジック層から結果を取得すると、すべてのエンティティに相当するクラスがあり、DAL の Person エンティティに対して、ビジネスロジック層に clsPerson があります。しかし、私のビューモデルはDALを認識していないため、ビジネスロジッククラスのみを認識しているため、clsPersonなので、ビジネスロジックのコードは次のようになります

例えば:

 public static IEnumerable GetclsPersons()
{ return DAL.GetPersons(); }

私の大きな問題は、何かのリストを取得するたびに、何かを保存または削除するたびに、ViewModel でリフレクションを使用する必要があることです。

したがって、xaml にバインドされた clsPerson プロパティがある場合:

public IEnumerable clsPersons { get; set; }
public ListCollectionView clsPersonList { get; set; }

clsPersons = BLL.GetclsPersons();
clsPersonList = new ListCollectionView((IList)clsPersons);

public clsPerson CurrentclsPerson { get; set; }

「CurrentclsPerson」に値を割り当てるたびに、リフレクションを使用する必要があります

CurrentclsPerson.Firstname = clsPersonList.CurrentItem.GetType().GetProperty("Firstname")
.GetValue(clsPersonList.CurrentItem,null).ToString();

ビューモデルでリフレクションを使用しないことを望んでいました。IEnumerable を使用する必要がないように、ビジネス ロジックと DAL を 1 つのクラス ライブラリに配置することを考えていました。

皆さんは何を使っていますか?

とにかくこれを回避する方法はありますか?

とにかくこのあたりはありますか?

助けてください..ありがとう。

4

2 に答える 2

1

1 つの解決策は、モデル オブジェクトを 1 つの dll に配置し、それをどこでも参照することです。モデル オブジェクトからすべてのロジックを除外する場合、これは簡単で十分です。

一方、GUI でバインドを使用したい場合は、オブジェクトにいくつかのインターフェイス (INotifyPropertyChanged など) を実装する必要があります。2 つの別個のエンティティ ブランチを保持し、マッピングを使用してそれらの間で変換することもできます。Automapperは、これに役立つツールの 1 つです。

T4 テンプレートを使用して、ToDto メソッドと ToEntity メソッドをクラスに追加し、それらの間で変換しています。

于 2012-09-09T14:58:46.557 に答える
0

私はあなたのビジネスクラスで次のことを行います:

public static IEnumerable GetPersons()
{
   using(StaffEntities context = new StaffEntities())
   {
        return from person in context.Persons.ToList()
               select new Person()
               {
                   Firstname = person.Firstname
               }
   }
}
于 2012-09-09T16:14:22.987 に答える