Удалить связь между уровнем доступа к данным и уровнем пользовательского интерфейса - PullRequest
0 голосов
/ 11 ноября 2019

Я хочу разработать n-уровневую архитектуру для приложения Windows. Я хочу удалить связь между уровнем пользовательского интерфейса и уровнем доступа к данным. Другими словами, я хочу, чтобы уровень пользовательского интерфейса зависел только от уровня бизнес-логики.

Пример, который у меня есть:

public Class Person
{
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
}

на уровне доступа к данным, я создаю нового человека в пользовательском интерфейсеслой, но я не буду называть слой доступа к данным. Каков наилучший подход?

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Для разработки приложений 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
    }
}

Уровень приложений и уровень доступа к данным должны зависеть от доменаслой и логика доступа к данным ничего не знают о прикладном уровне

0 голосов
/ 11 ноября 2019

Можно применить шаблон проектирования MVC - Model View Controller в сочетании с шаблоном проектирования DAO - Data Acess Object .

MVC отделит ваш IU от бизнес-логики и модели (данных), а внутри модели вы можете использовать свой доступ к данным, используя интерфейс, предоставляемый шаблоном DAO.

...