Для разработки приложений Windows и отделения интерфейса от уровня доступа к данным лучше использовать шаблон MVVM, см. Объяснение здесь
MVVM позволяет отделить интерфейс от модели, но дляЧтобы отделить логику доступа к данным от бизнес-логики, вам нужно разделить модель, и я рекомендую использовать Domain Driven Design (DDD), о которой вы можете прочитать здесь
и использовать ORM как Entity Framework
И вы должны следовать Принципу невосприимчивости к постоянству
Для вашего примера может быть следующее: на уровне логики домена у вас будет
//Domain Business layer logic
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
interface IPersonRepository
{
IEnumerable<Person> GetAll();
void Update(Person person);
}
на прикладном уровне
//Application logic
class PersonViewModel
{
private readonly IPersonRepository _personRepository;
public PersonViewModel(IPersonRepository personRepository)
{
_personRepository = personRepository;
}
public ObservableCollection<Person> Persons
{
get { return new ObservableCollection<Person>(_personRepository.GetAll()); }
}
}
и в доступе к данным у вас будет реализация IPersonRepository
//Data Access layer Persistance logic
class PersonRepository : IPersonRepository
{
public IEnumerable<Person> GetAll()
{
// ORM Implementation here
return new List<Person>();
}
public void Update(Person person)
{
// Update logic here
}
}
Уровень приложений и уровень доступа к данным должны зависеть от доменаслой и логика доступа к данным ничего не знают о прикладном уровне