2008-11-20 6 views
0

Предположим, мне нужно реализовать модель домена для StackOverflow.Как реализовать свойство «Last 20 something» в вашем классе домена?

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

Иногда мне может понадобиться «все комментарии», хотя ...

ответ

2

я мог бы быть под влиянием моего ORM инструмента, но я вижу это как запрос, а не свойство домена. Домен содержит ассоциации, и репозиторий инкапсулирует запросы, такие как тот, который вы описываете.

+0

Таким образом, у вас будет одно свойство «комментарии», и в зависимости от того, какой метод уровня сервиса вы вызываете (GetAllComments или GetLastComments), внутри вы получите разные наборы данных? – badbadboy 2008-11-20 19:24:39

2

Вы запросили бы ваш репозиторий для последних комментариев конкретного пользователя. что-то вроде

IList<Comment> recentComments = repository.GetRecentComments(user,20); 

Вы можете сделать это в модели, но в зависимости от того, сколько комментариев Вы ожидаете, чтобы я его избежать. Модель не должна знать, как заполнять себя, то есть работу репозитория; однако, если вы используете что-то вроде NHibernate, оно будет там.

public class User{ 

public IList<Comment> Comments { get;set;} 

public IList<Comment> GetRecentComments() 
{ 
    // Logic 
} 


} 

В этой реализации вы всегда будете загружать все комментарии, чтобы получить последний 20. Не большое дело, если есть только 50 комментариев, но если есть 5000 комментариев у вас совсем немного накладных расходов.