Я отображаюсь на свойства. Если я считаю это необходимым, я отображаю МЕТОД SET на поле. (обычно через что-то как "access=field.camelcase").
Это позволяет мне иметь симпатичные Запросы, например, "от Людей, Где FirstName = 'John'" вместо чего-то как "от Людей, Где firstName / _ firstName" и также избегают логики метода set при гидратировании моих объектов.
Свойства также полезны в случае, необходимо сделать что-то броское с данными, как это входит и из персистентного устройства хранения данных. Этого нужно обычно избегать, но некоторые редкие экономические модели или поддержка прежней версии иногда призывают к этому.
(Просто помните, что, если Вы так или иначе преобразовываете данные, когда они возвращаются с методом считывания, NHibernate будет (по умолчанию) использовать возврат из метода считывания и сохранять их тот путь назад к базе данных, когда Сессия будет сброшена/закрыта. Удостоверьтесь, именно это Вы хотите.)
Я отображаюсь на свойства, потому что я использую автоматические свойства.
За исключением наборов (как set
s. Они я отображаюсь на поля (access="field.camelcase-underscore"
) потому что у меня нет общественных собственностей, выставляющих их, но методы.
Я отображаюсь на свойства, я не столкнулся с ситуацией, где я отобразился бы на поле... и когда я сделал, я увеличиваю свой дизайн B.O. для потребности. Я думаю, что это допускает лучшую архитектуру.
Несуществующие объекты
Отображение на поля может быть полезным при реализации шаблона несуществующего объекта если классы. Поскольку это не может быть выполнено (легко) при отображении на Свойства. Вы заканчиваете тем, что имели необходимость хранить поддельные объекты в базе данных.
HQL
Я был не уверен, который с HQL запрашивает Вас, должен был изменить имена свойства, если бы Вы использовали подход доступа к полю. т.е. если Вы имели <property name="FirstName" access="field.camelcase" />
Я думал, что Вы могли все еще записать "From Person where FirstName = :name";
поскольку это использовало бы имя свойства все еще.
Дальнейшее обсуждение полевых стратегий и Несуществующего объекта может быть найдено здесь.
Производительность
Относительно функционирования поля по сравнению со свойством на блоге John Chapman кажется, что нет большой части проблемы в производительности с наборами результатов маленькими среднего уровня.
Таким образом, каждый подход имеет определенные льготы, которые могут быть полезными в зависимости от сценария (доступ к полю позволяет методы считывания только для чтения, никакую потребность в методах set, работы доступа свойства, когда ничто специальное не требуется от Ваш постепенно и, кажется, подход defacto. и т.д.)
Я склонен соглашаться с ответами выше. Обычно отобразитесь на свойства почти для всего, затем отобразитесь на поля для методов set набора.
Единственное другое место, которое Вы хотели бы отобразить на поля, - когда у Вас есть что-то:
public class AuditableEntity
{
/*...*/
DateTime creationDate = DateTime.Now;
/*...*/
public DateTime CreationDate { get { return creationDate; } }
}
Я сопоставляю непосредственно с полями, что позволяет мне использовать средства настройки свойств для отслеживания «грязного» состояния свойства.