Silverlight 4, RIA Services Многоэтапная проверка на стороне сервера - PullRequest
1 голос
/ 03 июля 2010

Вопрос новичка, у меня простой клиент Silverlight 4.Я создаю несколько методов на стороне сервера для обработки создания / проверки новых пользователей.Прежде чем создать пользователя, я хотел бы проверить ряд вещей.Имя пользователя уже существует?Адрес электронной почты действителен?Пароль проходит проверку на строгость?И т.д.У меня есть несколько вызовов, которые мне нужно сделать на сервер для каждого условия, которое я хочу проверить.Все звонки асинхронные.На мой взгляд, я могу сделать следующее:

  1. Вызывать каждую функцию проверки на сервере и делать ложные синхронные вызовы, используя ожидания.ew.
  2. Попробуйте сшить все функции обратного вызова и завершить события.Ew.
  3. Объединить все вызовы проверки в один на стороне сервера.Кажется чистым сейчас, но что происходит, когда я хочу выполнить разные проверки или разные комбинации проверок?Это означает больше новых функций.Похоже, что это может стать головной болью в будущем.

Есть ли элегантное решение, которое уклоняется от меня?

Спасибо.

1 Ответ

0 голосов
/ 03 июля 2010

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

Что касается вещей, связанных с бизнес-логикой (например, если пароль уже существует и т. Д.), Я бы лично выбрал вариант 1.

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

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

EDIT: Если вы хотите превратить асинхронные вызовы в синхронизированные, лучше использовать что-то вроде:

Context.Load(Context.GetUsersQuery()).Completed += (sender, args) =>
{
   //Context.Load... next call
};

вместо ожидания произвольного количества времени.

...