Как связать рассчитанные значения с объектом - PullRequest
0 голосов
/ 15 июня 2011

У меня есть несколько базовых объектов, таких как Customer, Portfolio и ... с некоторой ассоциацией с другими объектами.Я легко могу отобразить необходимую информацию на веб-странице, читая значения объекта.Проблема в том, что мне делать, когда значение, связанное с объектом, вычисляется и возвращается методом, значение, которое имеет смысл только в определенном контексте и не может быть присоединено к объекту как переменная экземпляра?В этом случае, если у меня есть список, скажем, Users, я должен передать имя пользователя каждого пользователя методу, чтобы получить вычисленное значение.Это вызывает проблему, чтобы сохранить связь при отображении значений на странице.

Пример, чтобы прояснить это:
Приложение предоставляет пользователям возможность отслеживать действия друг друга, позволяя им добавлять тех, кого они хотят, в список.Если этот пользователь выполняет поиск пользователей, есть возможность следить за каждым возвращенным пользователем.Я хочу убедиться, что эта опция отключена для тех пользователей, за которыми уже следят.Эта функциональность обеспечивается методом, подобным isFollowed(String follower, String followee), который возвращает логическое значение.Как я могу связать эти логические значения с каждым пользователем в результатах поиска?

Решения:
Одна вещь, о которой я могу подумать, - это добавить переменную followed в класс User.Но я не думаю, что это хороший подход, потому что эта переменная имеет смысл только в определенном контексте.Он не является частью класса User в домене.
Другой способ, о котором я могу подумать, - это использовать Украшение или Оболочки для расширения класса User и добавленияатрибут в дочернем классе.Но опять же, что, если у меня есть несколько объектов, которые должны быть в одном контексте.В этом случае я должен расширить их все с одним и тем же логическим атрибутом во всех классах.

Я надеюсь, что смогу прояснить.

Ответы [ 2 ]

1 голос
/ 15 июня 2011

Одно из решений - избежать запросов к сущностям (как в DDD / ORM) и выполнять запросы напрямую, используя подзапрос / объединение или даже используя некоторую денормализованную базу данных. Это то, что предлагает шаблон CQRS.

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

1 голос
/ 15 июня 2011

В принципе, я не вижу ничего плохого в методе экземпляра на User: bool IsFollowedBy(User user).

Конечно, это может привести к проблемам с производительностью. Если это так, вы можете создать отдельный объект для целей презентации, который объединяет данные из User и отслеживает ли его пользователь, выполняющий поиск. Затем вы можете создать запрос, который извлекает все необходимые данные для такого объекта за одну поездку в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...