Не все модели данных отображаются приятно на прикладные объекты. Если бы отображение не относительно просто, я пропустил бы Платформу Объекта. Вы будете делать стойки на руках заставлять его работать без любого ясного преимущества.
у Anders Hejlsberg были некоторые интересные комментарии об объектном/реляционном отображении здесь .
Это определенно комбинация Стратегии и Фабрики - но я не думаю, что это плохо. Шаблоны предназначены для объединения и использования друг с другом.
Трудно сказать, не глядя на этот план дизайна в контексте, хороший это дизайн или плохой. Имея только ту информацию, которую вы здесь предоставили, все может пойти в любом направлении.
Кажется, ваша голова находится в нужном месте, но позвольте мне просто предупредить вас: не растягивайтесь слишком сильно, чтобы отделить вашего клиента от ваша стратегия. Я делал это в прошлом, и это привело к запутанному беспорядку, который был бы намного проще, если бы я просто разрешил небольшую связь между двумя частями моего кода. Разделение - это хорошо, но попытки сохранить идеальное разделение могут привести к плохому коду и разного рода проблемам.
Мы использовали это множество различных сценариев синтаксического анализа, и он определенно работает. Я написал об этом в блоге с помощью примера кода: http://www.herrodius.com/blog/136
Уловка, которую мы используем, заключается в том, чтобы дать интерфейсу стратегии дополнительный метод canProcess, который просто возвращает логическое значение если стратегия способна работать с данными. Затем фабрика просто перебирает все свои стратегии и спрашивает каждую, может ли она работать с данными. Если есть возможность, мы возвращаем эту стратегию или выполняем ее.
В сценарии, который вы изображаете, на самом деле не было бы необходимости в контексте, который вместо этого был бы заменен фабрикой, которую вы хотите. Шаблон стратегии в этом случае - это просто накладные расходы и ненужный уровень сложности. Все, что вам нужно, - это интерфейс или абстрактный класс, реализации и Factory или Proxy для получения реализаций.
Анни комментирует мои мысли:
1) Есть Сервис - Синглтон. 2) Он содержит ссылку на класс DAO - он тоже синглтон. 3) В DAO есть метод, который извлекает ResultSet: ResultSet rs = ps.executeQuery (); Я хотел бы создать соответствующую стратегию внутри DAO для обработки этого набора результатов. Я не могу передать эту стратегию в конструктор DAO, потому что она специфична для входящего запроса. Передача его в конструктор сделает его одинаковым для всех входящих запросов. Поэтому я решил создать Factory внутри DAO (экземпляр объекта DAO) и внутри метода я собираюсь создать соответствующую стратегию (на основе запроса - локальный объект) из фабрики и использовать ее для обработки набора результатов.
На ваш взгляд, это решение хорошее?