Silverlight, RIA Услуги и защита наших данных в объектах - PullRequest
0 голосов
/ 28 января 2010

Silverlight великолепен, и с помощью служб RIA решает много вещей, НО.

Почему мы вынуждены получать; установить на каждую модель?

Мне стало известно, что если у нас есть Клиент, и Идентификатор Клиента никогда не должен изменяться, то свойство Идентификатор должно быть доступно только для чтения, если у Клиента есть пароль, который должен пройти через некоторую логику, прежде чем его нужно будет установить, свойство должно быть только для чтения, чтобы никто не мог использовать мой объект неправильно.

И одна из самых больших вещей, которые мы почти никогда не должны позволять получать; установите для коллекций, например, invoice.Rows, поскольку это может привести к трудностям, которые трудно найти. Может быть, я хочу заблокировать метод invoice.Rows.Add (который, кстати, нарушает принцип Закона Деметры), потому что я хочу сделать некоторую проверку в методе invoice.AddRow (row); перед добавлением строки.

Иногда мы хотим решить эту проблему на стороне сервера, например, отправив строку для счета-фактуры по услуге, когда она добавляется, но иногда мы хотим построить весь счет-фактуру на клиенте, а затем отправить его заново. Мне не нужно спрашивать службу. Эй, я только что добавил эту строку, могу ли я получить пересчитанную общую сумму с НДС и без НДС и т. Д.

Разве я единственный, кто чувствует себя потерянным или мои цели и цели неверны, разве мы не должны использовать серебряный свет с объектно-ориентированными мыслями?

1 Ответ

1 голос
/ 28 января 2010

Необходимость геттера связана с сериализацией - вы хотите иметь возможность установить во время десериализации.

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

Что касается Order / OrderDetail, то в общем случае мы ожидаем, что Order / OrderDetail представляет собой композиционный сценарий - вы либо вставляете заказ с деталями, либо обновляете заказ, чтобы добавить / удалить / обновить детали заказа. Поэтому, если вы хотите выполнить проверку, охватывающую весь график, вы можете прикрепить правило проверки либо к Order, либо к таким методам, как InsertOrder, UpdateOrder.

Что касается пересчета общей цены и т. Д., Вы, безусловно, можете сделать это на клиенте - например, прослушать уведомления об изменениях в коллекции Details и повторно вычислить свойство Total в Order. Код для перечисления деталей и выполнения агрегирования фактически может быть разделен между клиентом и сервером, поэтому вы не дублируете логику вычислений.

Надеюсь, это поможет.

...