(N) Hibernate: отображение ядра / мастера с отношениями - PullRequest
0 голосов
/ 17 декабря 2008

Я начинаю работу в компании среднего размера, которая в основном занимается написанием пользовательских приложений, взаимодействующих с их системой ERP. Это мой первый раз, когда я выполняю такую ​​работу, поэтому концепция ERP является новой для меня, и я изучаю ее по частям.

На данный момент я написал только два приложения и изучил модель базы данных по ходу работы и только столько, сколько мне нужно, чтобы выполнить работу, но даже с таким ограниченным количеством я могу начать видеть большую картину. Моя идея состояла в том, чтобы написать библиотеку со всеми хранящимися там объектами отображений / моделей, чтобы новое приложение могло просто ссылаться на эту библиотеку. После этого каждое приложение будет создавать собственный репозиторий, ограничивающий доступ только тем, что ему нужно, и перспективой, которая имеет смысл.

Проблема / вопрос, который у меня есть, заключается в том, как бороться с отношениями внутри (N) отображений Hibernate. Если у меня есть объект заказа с полными отношениями, сопоставленными в этой базовой библиотеке, ничто не помешает кому-то навсегда путешествовать по этим отношениям (если я единственный программист ...). Таким образом, использование хранилища как своего рода ограничение области действия не работает вообще в этом смысле.

Если вместо этого я ограничиваю отношения в (N) отображении Hibernate для этого объекта заказа, репозиторий возвращает объект заказа, связанный только с теми отношениями, которые требуются для его области действия. Недостатком является то, что теперь мне нужно создавать сопоставления для каждого проекта вместо того, чтобы иметь один «хранилище сопоставлений».

Как другие люди справляются с этим?

Вроде не связано, но я также переводил (N) постоянные объекты Hibernate, которые могут состоять из нескольких отношений, в своего рода отдельный непостоянный объект, более подходящий для конкретного приложения (обычно гораздо более подверженный влиянию UI). Это обычное дело, или я отбрасываю некоторые преимущества (N) Hibernate, забирая возвращенные объекты и переводя их во что-то еще?

пс. О тэге DDD ... Я не знаю, подробно ли это описано в DDD, но у меня есть книга на заказ. Хотя я не уверен, что можно найти хороший ресурс до того, как книга появится.

1 Ответ

1 голос
/ 24 августа 2009

Довольно старый вопрос. Я думаю, вы уже нашли ответ, но на случай ...

Я вижу два способа решения вашей проблемы.

  1. Ограничить доступ к таблице через учетную запись пользователя в вашей базе данных. Например, в MySQL, вы можете сделать это. Недостатком является то, что если все ваши доменные классы сопоставлены и скомпилированы в вашей nh dll, программист все равно может видеть эти сущности. Если он / она пытается получить к нему доступ, это вызовет исключение (nh пытается получить доступ к таблице базы данных, база данных отказывается).

  2. Создать DLL для каждого случая. Но я думаю, вам также может понадобиться создать несколько учетных записей.

...