3

私は現在、このソリューションの設計に固執しています。

データレイヤーの設計は、次のもので構成されています。

  • レシピ(親の高レベルオブジェクト)
    • 言語の詳細(名前、言語による説明)(多く)
      • ヘッダー(多く)
      • ステップ(多く)
        • 材料(多く)
        • 数量(多く)
        • 手順(多く)
      • ノート(多く)

私が抱えている課題は、オブジェクトがWCF SaveRecipe(recipe)メソッドから入力されたときに、データベース内の子オブジェクトを追加/削除するデータアクセスデザインを作成する方法です。

これはすべて、アプリケーションに通信レイヤーを追加するように求められた管理者から生じています。現在、UIはビジネスレイヤーに結合されており、BLはDALに直接結合されています。基本的に、BLとDALの間にWCFを挿入する必要があります。 。

このスレッドで、L2Sを使用することはWCFよりも良い考えではないことを読みましたが、設計は新しいものではないため、このタイプの方法論を使用し、大量のリファクタリングが可能になったらそれから離れる必要があります。 UIの動作。

4

4 に答える 4

5

WCFを使用してデータを送信しようとしている場合は、ドメイン内を移動するデータのモデルを作成することをお勧めします。私が見つけた限りでは、IQueryableオブジェクトをシリアル化することはできませんが、Linqが設定するクラスのセットを作成して、それをシリアル化することはできます。例えば:

[DataContract]
public class Recipe {

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Description { get; set; }

    [DataMember]
    public List<Ingredient> Ingredients { get; set; }

}

次に、それを埋めます

List<Recipe> recipes = (from r in dc.recipe
                           select new Recpie {
                               Name = r.name,
                               Description = r.description,
                               Ingredients = (Linq code to make list of ingredients)
                           }).ToList();

そして、WCFを使用してリストを送信すると、簡単になります。

于 2008-12-31T16:34:07.623 に答える
1

私はあなたが参照したスレッドに関するカールからのこの答えが好きです:

データオブジェクトを転送するための独自のクラスを作成することをお勧めします。もちろん、これらのクラスはDataContractsとして実装されます。サービスレイヤーでは、linq-to-sqlオブジェクトとデータキャリアオブジェクトのインスタンスの間で変換します。面倒ですが、サービスのクライアントをデータベーススキーマから切り離します。また、システムで渡されるデータをより適切に制御できるという利点もあります。

とにかくリファクタリングする必要があるようです。同様に、UIレイヤーのlinq2sqlへの依存関係をリファクタリングすることから始めます。

迅速で簡単な解決策はないと思います。

于 2008-12-31T16:32:28.640 に答える
1

WCF 経由で L2S クラスを公開することはお勧めしません。DataContract オブジェクトの階層を作成し、それらを WCF 経由で渡します。これの欠点は、L2S オブジェクトを DataContract 階層に「ディープ コピー」する必要があることですが、利点は、ネットワークを介した転送に必要かつ適切なフィールドのみを含めることができることです。たとえば、私が現在取り組んでいるプロジェクトでは、ネットワーク経由で EmployeeData オブジェクトを渡します。これには、L2S Employee フィールドのほとんどが含まれますが、従業員のソルト ハッシュやパスワード ソルトなどは除外されます。

于 2008-12-31T16:35:09.120 に答える
0

子エントリを含むクラスと含まないクラスの両方を作成することも考えられます。私は時々このようなクラスを作成しました:

class Recipe {
    [DataMember] public string Name;
    [DataMember] public string Description;
}

class RecipeWithIngredients : Recipe {
    [DataMember] public IList<Ingredient> Ingredients;
}

編集:投稿が完了する前に誤って投稿しました。

于 2008-12-31T16:45:23.873 に答える