Уведомлять пользовательский интерфейс об изменениях в элементах Entity Framework

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

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

В настоящее время я использую наблюдаемые коллекции и копии сущностей EF для выполнения уведомлений пользовательского интерфейса, но это вызывает множество проблем, связанных с транзакциями, потому что в случае откатов мне также необходимо откатить изменения в этих коллекциях.

В более общем плане, как мне сделать так, чтобы бизнес-уровень предоставлял наблюдаемые коллекции и объекты пользовательскому интерфейсу для сущностей на уровне данных, которые запускают уведомления при фиксации изменений уровня данных?

Есть предложения, как это сделать? Спасибо за вашу помощь.

Вам нужно полагаться на события EF? Почему вы не можете просто ввести какое-то настраиваемое событие, которое будет вызвано при успешном добавлении команды?

Alex Riabov 22.05.2018 10:29

@AlexRiabov с тобой согласен. Я думаю, что это лучшая практика для такого рода вещей. Традиционные события .Net сделают свою работу. По крайней мере, это бизнес-логика, так зачем делегировать это EF, который, безусловно, является вашим уровнем данных?

CodeNotFound 22.05.2018 10:36

Таким образом, вы имеете в виду, что бизнес-уровень просто вызывает событие об изменении данных. В свою очередь, модели просмотра пользовательского интерфейса синхронизируют свои данные с уровнем данных. Это кажется более простым подходом, чем мой. Но это также означает, что на уровне данных потребуется кэшировать данные, чтобы избежать дополнительных обращений к базе данных. Я попробую. Спасибо.

Hannes 29.05.2018 06:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отвечу себе по комментарию Алекса Рябова. Бизнес-уровень просто вызывает событие об изменении данных. В свою очередь, модели просмотра пользовательского интерфейса синхронизируют свои данные с уровнем данных. Но это также означает, что на уровне данных потребуется кэшировать данные, чтобы избежать дополнительных обращений к базе данных.

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

Hannes 29.05.2018 09:50

Другие вопросы по теме