2012-05-16 3 views
0

Я пытаюсь построить трехуровневое приложение. В DAL Я получаю данные от database (No-SQL) до DataSets. В BLL обрабатываю эти данные, если это необходимо. В PL Я показываю соответствующие данные.Обновление DataSet - в каком слое?

Возникает вопрос: Если данные в database по-прежнему обновление, и мне нужно иметь сразу новейшие «строки», я должен обновить DataSet в BLL с некоторым таймером или где-то еще?

ответ

1

Когда вы говорите, «сразу» Я должен предположить, что ваше приложение очень нетерпеливый данных ... для этого вы должны использовать 4-ый слой между DLL и BLL и называется Cache.

Как бы то ни было, что вы хотите что-то быстро, и для быстрых вещей вы никогда не звоните в базу снова и снова, вы звоните один раз и когда есть обновление, вы очищаете кеш на этом объекте, а в следующий раз, когда ваш BLL запрашивает данных, кеш пуст, поэтому он переходит к DAL для получения нового набора записей, помещая его в кеш для следующего вызова.

Чтобы быть начеку с обновлениями вы можете сделать свою собственную систему уведомлений, или просто реализовать интерфейс INotifyCollectionChanged ...

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

DataTable dt = bll.ListAllEmployeesByCompanyId(2); 
dt.Rows.Insert(0, myNewRow); 
gv.DataSource = dt; 

вы можете легко создать хороший UX, сделав верхнюю границу в этой сетке и сделать его желтым (поскольку данные не поступают из базы данных) и превратить его в светло-зеленый, когда данные поступают из базы данных (d все синхронно) ...

Это все до вашей стратегии, всегда вниз к одному и только вопросу для каждого программного обеспечения мы разрабатываем:

Имеет ли пользователь действительно заботится о том, что удивительных особенность?

Поскольку мы разработчики склонны считать много, а иногда, вы неправильно предположить :)

+0

Thanx для ответа. Но если в каждую секунду поступают пакеты, я думаю, что лучшая идея - это только кеш обновления, а не ясный. Я имею в виду, что когда какие-либо изменения были вызваны, кеш обновляет собственные данные. – Saint

+0

Если пакеты приходят каждую секунду, вы можете использовать совершенно другой подход, и никогда не будет нормальным, который применяется только к 80% случаев, с такими частотами обновления, вы бы использовали разные базы данных и технологии, как я [спросил на сайте Programmers] (http://programmers.stackexchange.com/questions/43927) – balexandre

+0

Теперь я использую MongoDB (http://en.wikipedia.org/wiki/MongoDB), в котором есть необходимые механизмы, такие как «Архивирование и ведение журнала событий» «Агрегация», «Выполнение JavaScript на стороне сервера», «Обрезанные коллекции» и многое другое, поэтому я считаю, что база данных подходит. Только вопрос об архитектуре и способе обновления данных. – Saint