Я работаю над спортивным приложением, в котором команды играют в группах друг против друга, а групповые матчи автоматически генерируются, когда команда добавляется в группу или удаляется из нее. Как, например, в футбольном туалете. Для хранения команд и матчей я использую базу данных и EF. Для пользовательского интерфейса я использую WPF и MVVM.
Теперь я ищу хороший дизайн кода, который уведомляет пользовательский интерфейс, когда команда добавляется в группу (или удаляется из нее), и новые совпадения автоматически создаются (или удаляются) об изменениях в модели данных EF.
В настоящее время я использую наблюдаемые коллекции и копии сущностей EF для выполнения уведомлений пользовательского интерфейса, но это вызывает множество проблем, связанных с транзакциями, потому что в случае откатов мне также необходимо откатить изменения в этих коллекциях.
В более общем плане, как мне сделать так, чтобы бизнес-уровень предоставлял наблюдаемые коллекции и объекты пользовательскому интерфейсу для сущностей на уровне данных, которые запускают уведомления при фиксации изменений уровня данных?
Есть предложения, как это сделать? Спасибо за вашу помощь.
@AlexRiabov с тобой согласен. Я думаю, что это лучшая практика для такого рода вещей. Традиционные события .Net сделают свою работу. По крайней мере, это бизнес-логика, так зачем делегировать это EF, который, безусловно, является вашим уровнем данных?
Таким образом, вы имеете в виду, что бизнес-уровень просто вызывает событие об изменении данных. В свою очередь, модели просмотра пользовательского интерфейса синхронизируют свои данные с уровнем данных. Это кажется более простым подходом, чем мой. Но это также означает, что на уровне данных потребуется кэшировать данные, чтобы избежать дополнительных обращений к базе данных. Я попробую. Спасибо.





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