Мы работаем над многофункциональным клиентом (написанным на Flex), который подключен к серверной части Java, используя как RMI, так и JMS. Я думал о реализации клиента в стиле DDD, чтобы у него были репозитории для операций CRUD с объектами домена.
Однако проблема в том, что вся внутренняя коммуникация происходит асинхронно, и у меня нет возможности заставить клиента ждать, чтобы продолжить, пока он не получит ответ. Это означает, что на низком уровне я могу вызвать метод удаленного объекта и получить AsyncToken в качестве возвращаемого значения. Затем я могу прослушивать события в asynctoken, чтобы узнать, прошел ли вызов или нет. Однако это нарушает основную идею репозитория, чтобы скрыть технические детали от клиента.
Думаю, может быть 2 варианта:
- иметь методы в репозитории, возвращающие asynctoken, что мне кажется беспорядочным решением
- пусть методы возвращают пустую коллекцию (например, для findAll), которая будет заполнена при получении ответа.
У обоих есть свои плюсы и минусы, и я хотел бы услышать ваш отзыв, ребята.
(в дальнейшем, каковы были бы хорошие стратегии кэширования? В зависимости от ситуации, я не хочу, чтобы репозиторий вызывал сервер каждый раз, когда я запрашиваю у него все сущности. Как это повлияет на подпись методов в репозитории. )