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