2014-01-20 3 views
0

У меня есть приложение WPF, которое использует сущность framework. Я собираюсь внедрить шаблон репозитория, чтобы сделать взаимодействие с EF простым и более проверяемым. Несколько клиентов могут использовать это приложение и подключиться к одной базе данных и выполнять операции CRUD. Я пытаюсь думать о способе синхронизации репозиториев клиентов, когда вы вносите изменения в базу данных. Может ли кто-нибудь дать мне какое-то направление в отношении того, как можно решить проблему такого типа, и некоторые возможные шаблоны, которые были бы полезны для этого типа проблем?Сохранение хранилища, синхронизированное с несколькими клиентами

Я был бы очень открыт для любой информации/книг о том, как синхронизировать клиентов и даже предупреждать о том, что делают другие клиенты (единственное, что я мог подумать, - это запустить серверный процесс, который передает сообщения) , Спасибо

ответ

1

Проще всего поддерживать постоянный пользовательский интерфейс клиента - это просто обновлять данные так часто. Если это действительно так важно, вы можете установить DispatcherTimer галочкой каждую минуту, когда вы сможете получить последние данные, которые отображаются.

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

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


UPDATE >>>

Там нет абсолютно никакой пользы от проведения полного набора данных в приложении (или хранилище). Фактически, вы вполне можете обнаружить, что это добавляет вредных эффектов из-за дополнительных требований к ОЗУ. Если вы проводите опрос данных каждые несколько минут, это всегда будет актуальным в любом случае.

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

Think метода Equals ... Вы могли бы сделать что-то вроде этого:

public override bool Equals(Release otherRelease) 
{ 
    return base.Equals(otherRelease) && Title == otherRelease.Title && 
     Artist.Equals(otherRelease.Artist) && Artists.Equals(otherRelease.Artists); 
} 

(Не на самом деле использовать метод Equals, хотя, или вы столкнетесь с проблемами позже). А потом что-то вроде этого:

if (!oldRelease.Equals(newRelease)) oldRelease.UpdatePropertyValues(newRelease); 

И/Или это:

if (!oldReleases.Contains(newRelease) oldReleases.Add(newRelease); 

Я предполагаю, что вы получите изображение сейчас.

+0

Спасибо. Это имеет большой смысл. Мне любопытно, что было бы быстрым способом увидеть, какие новые сущности были добавлены в БД в EF. Если я правильно разбираюсь в шаблоне хранилища, репозиторий «Клиент». будут иметь все объекты-клиенты EF, и репо будет периодически опробовать БД и найти новых клиентов.Как бы я обнаружил, какие новые сущности находятся в БД, и что мой список репо в настоящее время имеет без грубой силы? Благодаря! –

+0

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

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