Чудя се какво се счита за по-добра или по-правилна практика в следния сценарий:
Картографирах следните бизнес обекти с NHibernate:
- Стена
- Пост на стената
- WallPostComment
Една стена има от нула към много WallPosts. WallPost има от нула към много WallPostComments. Общият корен е Стена.
Пиша задача за добавяне на WallPostComment към WallPost. Приложението е MVC приложение и заявката за добавяне на новия WallPostComment съдържа идентификатора на WallPost, към който принадлежи коментарът. За да добавя коментара, трябва да извлека публикацията, към която трябва да се добави. Въпросът ми е: кой е най-добрият/най-правилният начин да направите това?
Досега съм пробвал два подхода и единият ми се стори по-„правилен“, въпреки че е неефективен. Друг, по-ефективен, подход се усеща като „грешен“.
1) Зареждам корена на агрегата на стената от сесията и избирам FirstOrDefault от неговата колекция Posts. Това се чувства „правилно“, тъй като имам достъп до публикацията на стената чрез обобщения корен, но това води до извличане на всички публикации на стената от базата данни (неограничен набор от резултати).
2) Зареждам публикацията на стената директно от сесията, използвайки wallPostId, предадена ми от заявката. Това ми се струва „погрешно“, защото обикалям обобщения корен – но това е едно попадение в базата данни за един ред от данни.
Кой е по-добрият или предпочитан подход? Какви други предложения имате?