데이터 액세스를 통해 Get
및 Save
이 필요한 곳에 Foo라는 클래스를 구현해야합니다.이 디자인은 데이터 액세스에 어떤 영향을 줍니까?
내가 클래스가 필요하고, 하나는 XmlFile에서 데이터를 가져오고 저장하고, 다른 하나는 비슷한 쿼리 (GetFooById, GetFooByLevel
, ...)를 통해 객체를 반환하는 서비스라고 생각할 수 있습니다. 이것이 제가이 디자인을 명확하게하고 왜 분리해야하는지에 대한 이유입니다.
데이터 액세스를 통해 Get
및 Save
이 필요한 곳에 Foo라는 클래스를 구현해야합니다.이 디자인은 데이터 액세스에 어떤 영향을 줍니까?
내가 클래스가 필요하고, 하나는 XmlFile에서 데이터를 가져오고 저장하고, 다른 하나는 비슷한 쿼리 (GetFooById, GetFooByLevel
, ...)를 통해 객체를 반환하는 서비스라고 생각할 수 있습니다. 이것이 제가이 디자인을 명확하게하고 왜 분리해야하는지에 대한 이유입니다.
나는 당신이 저장소 패턴으로 올바른 길을 가고 있다고 생각합니다. 당신은 푸 객체가 저장 문제에 의해 분리되어 이런 식으로이
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'할당을 변경하지 않아도됩니다.
, 당신이 데이터베이스를 인터페이스하는 경우 나는 모든 관련에 대한 하나 개의 저장소로 가고 싶어.
XML의 경우 - 사용자가 생각한대로 -
XML로드/저장을 Foo의 일부로 만들 수 있습니다. 예 : static Foo Parse(string)
및 string ToXML()
또는 이와 유사한 그렇게하면 더 유창한 로딩/저장을 할 수 있습니다. (그리고 XML과 관련하여 더 많은 객체 계층 구조 등이있는 경우 - Db/관계형 데이터를 사용하면 상황이 더 평평 해지고로드/저장이 실제로 가능합니다. 레코드를 반복합니다. XML의 경우에는 노드가있는 계층 구조를 따라 걷는 것이 더 중요합니다. 또는 확장 클래스로 분리 할 수 있습니다 (예 : Get(this Foo, string xml)
.
제 의견으로는 XML을 직렬화와 비슷하게 만들거나 저장하는 것을 고려합니다 (객체, 계층 구조, 전체 구조에 따라 다름).
그런 다음 쿼리를 통해 리포지토리를 구축 할 수 있습니다.
'Foo'가 향후 XML을 따르지 않을 수도 있고 그렇지 않을 수도 있습니다.