Я думаю, что вы на правильном пути с шаблоном хранилища.Вы можете сделать что-то вроде этого
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
Таким образом, объект Foo будет отделен проблемами хранения.И позже, если вы хотите использовать БД вместо XML, просто напишите другую реализацию.Приложение будет использовать интерфейс, поэтому вам не нужно ничего менять, кроме назначения «репо».