Меня отправили в подчинение, и я начал изучать Свободный NHibernate (без предыдущего опыта NHibernate). В моем проекте я программирую на интерфейсы для уменьшения связи и т. Д. Это означает, что почти все относится к интерфейсу, а не к конкретному типу (IMessage вместо Message). Идея заключается в том, чтобы помочь сделать его более тестируемым, позволяя имитировать зависимости.
Однако (свободно) NHibernate не любит, когда я пытаюсь сопоставить интерфейсы вместо конкретных классов. Проблема проста - согласно Fluent Wiki, было бы разумно определить поле идентификатора моего класса, например,
int Id { get; private set; }
, чтобы получить типичный автоматически сгенерированный первичный ключ. Однако это работает только с конкретными классами - я не могу указать уровень доступа для интерфейса, где та же самая строка должна быть
int Id { get; set; }
и я предполагаю, что это сводит на нет приватность сеттера в конкретном классе (идея заключается в том, что только NHibernate должен когда-либо устанавливать идентификатор, назначенный БД).
Пока, я полагаю, я просто сделаю сеттер публичным и постараюсь избежать соблазна написать ему ... Но есть ли у кого-нибудь представление о том, что было бы "правильным", наилучшим способом создания правильного поле первичного ключа, в которое может записывать только NHibernate, в то же время программируя только интерфейсы?
ОБНОВЛЕНО
Из того, что я понимаю после двух приведенных ниже ответов от mookid и Джеймса Грегори, я вполне могу оказаться на неправильном пути - у меня не должно быть причин иметь интерфейс для каждой сущности, как сейчас. Это все хорошо. Я думаю, что мой вопрос становится: нет ли причины программировать на 100% против интерфейса для каких-либо объектов? И если есть хотя бы одна ситуация, когда это может быть оправдано, возможно ли это сделать с помощью (свободно) NHibernate?
Я спрашиваю, потому что я не знаю, чтобы не критиковать. Спасибо за ответы. :)