0

私は小さなプログラムを書いています。作成された各リポジトリを制御するために作成しているインターフェイスは、Save(IPublicObject)のメソッドを定義します。リポジトリCRUDのSQLバージョンにLINQを使用しています。私の質問はこれです。インターフェイスタイプを受け入れるメソッドを1つだけにしたい。次に渡す継承されたタイプの保存アクションを見つけるのに最適な方法を考えたいと思います。

この本では、エンタープライズアプリケーションアーキテクチャのパターンを読んでいます。継承マッピングに頼っています。だから私はの派生オブジェクトを作成します

public class ConcretePublicObjectOne : IPublicObject{}

次に、これをリポジトリの保存関数に渡します。この時点で、私はどのように言うのが最善かを考えようとしています。「何を」を使用する必要があります。保存方法など...

タイプをマッピングするレジストリ、構成設定を使用する必要がありますか?

4

3 に答える 3

3

LINQ-to-SQL の場合、データ コンテキストは既に多くのマッピングを行っています。そのため、ジェネリックは、インターフェイスを考慮しながら保存を実現するための最良の方法であると思います(ただし、このシナリオでインターフェイスが何を提供しているかはよくわかりません...)。

以下を介して、データコンテキストの一般的な側面にアクセスできますGetTable<T>()

    static void Save<T>(T item)
        where T : class, IPublicObject
    {
        using (DataContext ctx = GetDataContext())
        {
            Table<T> table = ctx.GetTable<T>();
            // for insert...
            table.InsertOnSubmit(item);
            // for update...
            table.Attach(item, true);
            // for delete...
            table.DeleteOnSubmit(item);

            ctx.SubmitChanges();

        }
    }

T型推論は、保存時に を指定する必要がないことを意味する必要があることに注意してください。

    Foo foo = new Foo();
    Save(foo); // <Foo> is inferred

それは役に立ちますか?

于 2008-10-19T14:39:04.740 に答える
0

マーク・グラベル:

ありがとうございます。私が言うように、あなたの例を使用していると思いますが、データコンテキストから取得したモデルを維持する必要があり、LINQ にバインドされます。

あなたがやったことは、まさに私が探しているものです。オブジェクトに基づいてタイプを見つけ、コミットするアクションを認識します。あなたの例を使用して、匿名型を使用してモデルに変換を適用し、その linq コードを操作できますか。私はあなたが見るさまざまな保管方法を持っています。モデルが全面的に作業する必要があります。モデルは一種の自己完結型で、外のことは何も知りません (笑)。

于 2008-10-20T07:44:11.850 に答える
0

あなたがしたいことは、次のことです。

Repository.Save(publicObject)

publicObjectからメソッドを呼び出すリポジトリは?

これが要件である場合は、リポジトリの Save メソッドを次のように定義できます。

public class Repository {
    public void Save(IPublicObject publicObject) {
        publicObject.Save();
    }
}

ここで、IPublicObject は次のように定義されます。

public interface IPublicObject {
    void Save();
}

ただし、このアプローチでは、エンティティごとに保存メソッドを定義する必要があります (例の ConcretePublicObjectOne など)。

于 2008-10-19T12:55:37.600 に答える