1

Мне нужно реализовать класс Foo, где мне нужно Get и Save через доступ к данным.Каким будет этот дизайн о данных доступа?

Я могу представить себе, что мне нужны классы, один из них - доступ, получение и сохранение данных из 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 

В этом случае объект Foo отсоединяется от озабоченностей хранения. И позже, если вы хотите использовать db вместо xml, просто напишите другую реализацию. Приложение будет использовать интерфейс, поэтому вам не нужно ничего менять, чем присвоение «репо».

1

В общем, если вы взаимодействия базы данных я бы с одним хранилищем для всех связанных с этим.
В случае XML - как я думаю, у вас есть -
Загрузка/сохранение XML может быть сделана частью Foo - например. static Foo Parse(string) и string ToXML() или что-то подобное. Это позволяет вам иметь более «плавную» загрузку/сохранение (и если у вас больше иерархии объектов и т. Д., Что часто бывает в случае с XML), то данные Db/реляционные данные более «плоские», а загрузка и сбережение действительно итерация записей. В случае XML чаще всего идет о прохождении через иерархию с узлами и т. д.). Или вы можете разделить класс расширений - например, Get(this Foo, string xml).
На мой взгляд, я считаю, что xml get/save больше похож на сериализацию (но зависит от ваших объектов, иерархии, общей структуры).
И тогда вы можете создать репозиторий перед тем, как его запросить.
Если ваш Foo не является или не может придерживаться XML в будущем, тогда отделите его.

Смежные вопросы