Ссылка на реальный объект или просто идентификатор объекта? - PullRequest
0 голосов
/ 06 марта 2012

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

Ответы [ 4 ]

2 голосов
/ 06 марта 2012

Я предпочитаю включать сам объект, поскольку один объект на самом деле имеет отношение к другому фактическому объекту - идентификатор объекта - это просто деталь реализации.Чтобы справиться с проблемой ненужных звонков, загляните в « lazy loading ».

2 голосов
/ 06 марта 2012
  1. Включайте другой объект, только если вам нужны подробности.

  2. в MVC идеально используют ViewModel, а не ваши объекты.Ваша ViewModel содержит только то, что ему нужно, так что, например, OrderEditViewModel будет содержать custommerid, если вы не хотите отображать пользовательское имя, в этом случае вы включите поля из клиента.Некоторые люди рекомендуют вам свести ваши объекты к модели представления, поэтому у вас нет OrderEditViewModel.Customer.CustomerId, но вместо этого ORderEditViewModel.CustomerId.Automapper может помочь вам в этом (а также valueinjecter - обратите внимание на орфографию)

  3. Если вам необходимо включить идентификатор, убедитесь, что при сохранении в базу данных ваше обновление включает в себя фразу «где id =@customerId и (здесь логика, обеспечивающая доступ вашего пользователя к этому обычному и корневому объекту)

У меня есть mvcsecurity.codeplex.com, чтобы помочь зашифровать идентификаторы записей на веб-странице, чтобы предотвратить их фальсификацию.хорошо (это помогает, но у вас все еще должно быть что-то в вашем запросе, чтобы предотвратить вмешательство в поле, поэтому злоумышленник не может добавить чужой идентификатор клиента, например _)

Я более подробно расскажу здесь о параметризации в MVC, если кому-то интересно: http://www.pluralsight -training.net / Microsoft / Курсы / TableOfContents? courseName = хак теплоизолирующие-DotNet-приложение

2 голосов
/ 06 марта 2012

Обычно всегда ссылаются на другой объект.

Многие технологии ORM имеют идею "прокси" и "отложенной загрузки", то есть, если вы не ссылаетесь на объект, он не будет загружать его.

1 голос
/ 06 марта 2012

Мое предложение будет всегда думать о дизайне, а не о производительности.Производительность может быть изменена, а дизайн - нет.Таким образом, если два объекта имеют такие отношения, когда требуется агрегирование / составление, вы должны это сделать.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...