NHibernate и интерфейсы с различными реализациями - PullRequest
4 голосов
/ 16 июля 2011

Я недавно начал работать с C # и NHibernate, так что все это для меня новичок.

В приложении, которое я создаю, мне нужно рассчитать расстояния между почтовыми индексами Великобритании. Один из подходов заключается в использовании координатной сетки и расстояния Пифагора. Другой подход - использовать Google Maps для определения расстояний.

У меня есть интерфейс Ipostcode с методом getDistance(IPostcode p) и в зависимости от реализаций классы будут разговаривать с разными таблицами.

Для Grid References у меня будет объект GridRefPostcode и таблица БД: (строка) почтовый индекс, (длинный) север, (длинный) восток.

Для Карт Google я буду использовать объект GoogleMapsPostcode и таблицу БД: (строка) почтовый индекс, (строка) otherPostcode, (двойное) расстояние.

Класс Person будет иметь поле IPostcode, а затем я буду рассчитывать расстояния на основе getDistance(), предоставленной обоими классами.

Теперь вопрос: как отобразить эти классовые отношения в NHibernate? Как я могу вписать интерфейс в отображение?

                   Person
                      ^
                      |
                  IPostcode ( Interface )
                   ^     ^
                   |     |
      GridRefPostcode    GoogleMapsPostcode

Возможно ли это вообще? У меня есть ощущение, что моя классовая структура должна быть полностью изменена, но это, кажется, самое разумное решение: если у меня есть расстояние между двумя почтовыми индексами, предоставленными Google, я использую его, если он недоступен, я ухожу GridReferences.

Любые идеи высоко ценятся!

...