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