4

データ アクセスに ADO.NET Entity Framework を使用し、そのオブジェクトをビジネス ロジック用に拡張し、それらのオブジェクトを UI のコントロールにバインドしたいと考えています。

別の質問への回答で説明されているように、 ADO.NET Entity Framework オブジェクトを部分クラスで拡張し、LINQ クエリでカスタム メソッドを使用することはできません。

ADO.NET Entity Framework 部分クラス http://img221.imageshack.us/img221/7329/clientsq0.gif

ランタイム エラーを引き起こすメソッドが Intellisense に表示されるのは望ましくありません。この問題を回避するには、アプリケーションをどのように設計すればよいですか?

カスタム メソッドを使用した VB.NET LINQ http://img83.imageshack.us/img83/1580/iswashingtongn0.gif

データ アクセス クライアント クラスとビジネス ロジック クライアント クラスが必要ですか? 混乱してしまいそうです。

4

2 に答える 2

2

(Plain Old C# Objects) POCO と Manager を使用してソリューションを設計できます。

このようにして、ビジネス ロジックを値オブジェクトから分離します。

「きれいに見える」ようにするには、メソッドをパラメーターの (this) 修飾子でマークして、それらのメソッドを拡張メソッドとして使用できるようにします。

例はこれをかなり明確にすることができます:

ロケーション値オブジェクト:

public class Location
{
    public string City { get; set; }
    public string State { get; set; }
}

ロケーションマネージャー:

public static class LocationManager
{
    public static bool IsWashington(this Location location)
    {
        return location.State == "WA";
    }
}

現在、拡張メソッドは、オブジェクトの標準のプロパティ/メソッドとは異なる方法で表示されます。

「IsWashington」メソッドは 2 つの方法で呼び出すことができます

Location location = new Location { State = "WA" };
LocationManager.IsWashington(location);

また

Location location = new Location { State = "WA" };
location.IsWashington();

これで、ビジネス ロジックと値オブジェクトが分離されましたが、「きれいな」メソッド呼び出しを行うことができます。

仲間の開発者 (またはあなた :) ) が拡張メソッドの部分を悪用すると思われる場合は、使用しないでください。

于 2008-11-04T16:31:04.543 に答える
1

私もエンティティフレームワークを使用し、最初にクラス化されたものを拡張しようとしましたが、すぐにそれが良い解決策ではないことがわかったので、Bをプレフィックスとして付けた新しいクラスを(新しいクラスライブラリで)作成することになりました。エンティティクラスを拡張しませんでした.

NewsPost という名前のクラスがある場合、ビジネス クラスは BNewsPost という名前になり、そのクラスに接続されているすべてのビジネス ロジックがここに集められます。ロジックを配置するために使用される戻り要素を結合します。

非常に既存のソリューションではありませんが、うまくいきました。

よろしく

于 2008-11-10T15:31:43.647 に答える