Как решить оптимистические обновления параллелизма в приложениях N # уровня c # .NET? - PullRequest
1 голос
/ 12 октября 2010

Hy каждый.

В c # .net VS 2008 я разрабатываю решение N-уровня CRM и, когда это будет сделано, я хочу поделиться им.

Архитектура основана на:

Уровень доступа к данным, Entity Framework, Bussines Logic Layer, WCF и, наконец, уровень представления (выигрышные формы).

Где-то я читал, что более двухуровневых уровней проблематичны из-за Оптимистических обновлений параллелизма (несколько клиентских транзакций с одними и теми же данными).

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

На самом деле я хочу создать N-уровневое решение для больших проектов, а не 2-уровневое. Я не знаю, как решить такие проблемы с параллелизмом, и надеюсь получить помощь прямо здесь.

Конечно, должны быть хорошие механизмы для решения этой проблемы ... может быть, какие-либо предложения, примеры и т. Д .?

Благодарю вас в ожидании.

С наилучшими пожеланиями, Jooj

Ответы [ 3 ]

3 голосов
/ 12 октября 2010

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

Существует два распространенных метода оптимистического разрешения параллелизма.

Первый использует временную метку в строках, чтобы определить, была ли изменена версия, которую просматривал пользователь, когда они начали редактирование.время, когда они совершают свои правки.Имейте в виду, что это не обязательно правильный тип данных базы данных Timestamp.Различные системы будут использовать разные типы данных, каждый из которых имеет свои преимущества и недостатки.Это более простой подход, который отлично работает с большинством хорошо спроектированных баз данных.

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

Вот достойное объяснение того, какреализовать простой оптимистичный параллелизм в EF.

1 голос
/ 12 октября 2010

Несколько вещей приходят мне на ум:

1) Если вы используете EF, у вас наверняка нет уровня доступа к данным ?! Вы имеете в виду саму базу данных?

2) Вопрос с уровнями является как физическим, так и логическим. Так ты имеешь в виду физическое или логическое?

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

4) Не думайте слишком много о меньшем или большем количестве уровней. Просто реализуйте функциональность как можно проще и с минимальным количеством слоев.

1 голос
/ 12 октября 2010

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

...