NHibernate: отобразиться на поля или свойства?

12
задан mathieu 24 September 2008 в 20:31
поделиться

7 ответов

Я отображаюсь на свойства. Если я считаю это необходимым, я отображаю МЕТОД SET на поле. (обычно через что-то как "access=field.camelcase").

Это позволяет мне иметь симпатичные Запросы, например, "от Людей, Где FirstName = 'John'" вместо чего-то как "от Людей, Где firstName / _ firstName" и также избегают логики метода set при гидратировании моих объектов.

5
ответ дан 2 December 2019 в 22:24
поделиться

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

(Просто помните, что, если Вы так или иначе преобразовываете данные, когда они возвращаются с методом считывания, NHibernate будет (по умолчанию) использовать возврат из метода считывания и сохранять их тот путь назад к базе данных, когда Сессия будет сброшена/закрыта. Удостоверьтесь, именно это Вы хотите.)

2
ответ дан 2 December 2019 в 22:24
поделиться

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

За исключением наборов (как sets. Они я отображаюсь на поля (access="field.camelcase-underscore") потому что у меня нет общественных собственностей, выставляющих их, но методы.

1
ответ дан 2 December 2019 в 22:24
поделиться

Я отображаюсь на свойства, я не столкнулся с ситуацией, где я отобразился бы на поле... и когда я сделал, я увеличиваю свой дизайн B.O. для потребности. Я думаю, что это допускает лучшую архитектуру.

1
ответ дан 2 December 2019 в 22:24
поделиться

Несуществующие объекты

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

HQL

Я был не уверен, который с HQL запрашивает Вас, должен был изменить имена свойства, если бы Вы использовали подход доступа к полю. т.е. если Вы имели <property name="FirstName" access="field.camelcase" /> Я думал, что Вы могли все еще записать "From Person where FirstName = :name"; поскольку это использовало бы имя свойства все еще.

Дальнейшее обсуждение полевых стратегий и Несуществующего объекта может быть найдено здесь.

Производительность

Относительно функционирования поля по сравнению со свойством на блоге John Chapman кажется, что нет большой части проблемы в производительности с наборами результатов маленькими среднего уровня.

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

1
ответ дан 2 December 2019 в 22:24
поделиться

Я склонен соглашаться с ответами выше. Обычно отобразитесь на свойства почти для всего, затем отобразитесь на поля для методов set набора.
Единственное другое место, которое Вы хотели бы отобразить на поля, - когда у Вас есть что-то:

public class AuditableEntity
{
   /*...*/
   DateTime creationDate = DateTime.Now;
   /*...*/
   public DateTime CreationDate { get { return creationDate; } }
}
0
ответ дан 2 December 2019 в 22:24
поделиться

Я сопоставляю непосредственно с полями, что позволяет мне использовать средства настройки свойств для отслеживания «грязного» состояния свойства.

0
ответ дан 2 December 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: