2012-04-03 11 views
1

私はGetSaveにデータアクセスする必要があるFooというクラスを実装する必要があります。このデザインはどのようにデータにアクセスするのですか?

私はクラスにアクセスする必要があると思いますが、XmlFileからデータを取得して保存し、もう1つは同様のクエリ(GetFooById, GetFooByLevel、...)でオブジェクトを返すサービスです。そういうわけで私はこのデザインを明確にしたいと思っています。

答えて

2

あなたはリポジトリパターンを正しく理解していると思います。 あなたはFooのオブジェクトが格納懸念によって切り離されている。このように、この

public interface IFooRepository 
{ 
    void Save(Foo); 
    Foo GetById(int id); 
    Foo GetByLevel(int level) 
} 

public class FooXmlRepository:IFooRepository 
    { 
     //implementation 
    } 

    IFooRepository repo= new FooXmlRepository(); //or via your favorite DI container 

ような何かを行うことができます。そして、後でxmlの代わりにdbを使いたい場合は、別の実装を書いてください。アプリはインターフェースを使用しているので、「repo」の割り当て以外は変更する必要はありません。

1

データベースをインタフェースしている場合、私はすべての関連のための1つのリポジトリで行くと思います。
XMLの場合 - あなたが持っていると思うように -
XMLロード/セーブはFooの一部にすることができます。 static Foo Parse(string)およびstring ToXML()または同様のもの。これにより、より流暢なロード/保存が可能になります(また、XMLなどの多くのオブジェクト階層などがある場合は、Db /リレーショナルデータを使用した方がよりフラットになり、読み込み/保存が実際に行われますレコードを繰り返します。XMLの場合は、ノードなどの階層を歩いていくことが多い)。または、拡張クラスに分割することもできます。 Get(this Foo, string xml)
私の考えでは、XMLの取得/保存はシリアル化のようになります(ただし、オブジェクト、階層、全体的な構造に依存します)。
そして、その前にリポジトリを構築することができます。
あなたの 'Foo'が将来XMLに固執しない、または固執しない場合は、それを分離してください。

関連する問題