1

데이터 액세스를 통해 GetSave이 필요한 곳에 Foo라는 클래스를 구현해야합니다.이 디자인은 데이터 액세스에 어떤 영향을 줍니까?

내가 클래스가 필요하고, 하나는 XmlFile에서 데이터를 가져오고 저장하고, 다른 하나는 비슷한 쿼리 (GetFooById, GetFooByLevel, ...)를 통해 객체를 반환하는 서비스라고 생각할 수 있습니다. 이것이 제가이 디자인을 명확하게하고 왜 분리해야하는지에 대한 이유입니다.

답변

2

나는 당신이 저장소 패턴으로 올바른 길을 가고 있다고 생각합니다. 당신은 푸 객체가 저장 문제에 의해 분리되어 이런 식으로이

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

, 당신이 데이터베이스를 인터페이스하는 경우 나는 모든 관련에 대한 하나 개의 저장소로 가고 싶어.
XML의 경우 - 사용자가 생각한대로 -
XML로드/저장을 Foo의 일부로 만들 수 있습니다. 예 : static Foo Parse(string)string ToXML() 또는 이와 유사한 그렇게하면 더 유창한 로딩/저장을 할 수 있습니다. (그리고 XML과 관련하여 더 많은 객체 계층 구조 등이있는 경우 - Db/관계형 데이터를 사용하면 상황이 더 평평 해지고로드/저장이 실제로 가능합니다. 레코드를 반복합니다. XML의 경우에는 노드가있는 계층 구조를 따라 걷는 것이 더 중요합니다. 또는 확장 클래스로 분리 할 수 ​​있습니다 (예 : Get(this Foo, string xml).
제 의견으로는 XML을 직렬화와 비슷하게 만들거나 저장하는 것을 고려합니다 (객체, 계층 구조, 전체 구조에 따라 다름).
그런 다음 쿼리를 통해 리포지토리를 구축 할 수 있습니다.
'Foo'가 향후 XML을 따르지 않을 수도 있고 그렇지 않을 수도 있습니다.

관련 문제