Re[2]: каким паттерном можно заменить switch
От: Hard_Club  
Дата: 25.12.13 09:19
Оценка:
жесть!
Re: каким паттерном можно заменить switch
От: iZEN СССР  
Дата: 28.12.13 15:36
Оценка:
Здравствуйте, Hard_Club, Вы писали:

H_C>Если есть конструирование объекта с помощью вложенного switch с помощью анализа некоторых признаков, то каким паттерном проектирования / примитивом это можно перекрыть?


Command Map и ServiceLocator.

Если до этого условная логика использовалась для диспетчеризации запросов (по анализу некоторых признаков) и выполнения соответствующего действия (конструирование подходящего объекта), то нужно для каждого действия создать команду (шаблон Command), хранить команды в коллекции (Map), заменить условную логику кодом, выбирающим и выполняющим соответствующую команду (ServiceLocator выдаёт на выполнение команду, соответствующую "признакам").
Re[2]: каким паттерном можно заменить switch
От: ZeroLatency  
Дата: 29.12.13 01:29
Оценка:
Здравствуйте, iZEN, Вы писали:

ZEN>Здравствуйте, Hard_Club, Вы писали:


H_C>>Если есть конструирование объекта с помощью вложенного switch с помощью анализа некоторых признаков, то каким паттерном проектирования / примитивом это можно перекрыть?


ZEN>Command Map и ServiceLocator.


ZEN>Если до этого условная логика использовалась для диспетчеризации запросов (по анализу некоторых признаков) и выполнения соответствующего действия (конструирование подходящего объекта), то нужно для каждого действия создать команду (шаблон Command), хранить команды в коллекции (Map), заменить условную логику кодом, выбирающим и выполняющим соответствующую команду (ServiceLocator выдаёт на выполнение команду, соответствующую "признакам").


Это из области JEE, компонентов и вэб-фреймворков, как я понимаю, что не может квалифицироваться на решение столь простой проблемы тяжеловесным решением.
Re[3]: каким паттерном можно заменить switch
От: iZEN СССР  
Дата: 29.12.13 16:39
Оценка:
Здравствуйте, ZeroLatency, Вы писали:

ZL>Здравствуйте, iZEN, Вы писали:


ZEN>>Здравствуйте, Hard_Club, Вы писали:


H_C>>>Если есть конструирование объекта с помощью вложенного switch с помощью анализа некоторых признаков, то каким паттерном проектирования / примитивом это можно перекрыть?


ZEN>>Command Map и ServiceLocator.


ZEN>>Если до этого условная логика использовалась для диспетчеризации запросов (по анализу некоторых признаков) и выполнения соответствующего действия (конструирование подходящего объекта), то нужно для каждого действия создать команду (шаблон Command), хранить команды в коллекции (Map), заменить условную логику кодом, выбирающим и выполняющим соответствующую команду (ServiceLocator выдаёт на выполнение команду, соответствующую "признакам").


ZL>Это из области JEE, компонентов и вэб-фреймворков, как я понимаю, что не может квалифицироваться на решение столь простой проблемы тяжеловесным решением.


Это вообще к Java никак не относится.

У Джошуа Кириевски разве что в похожей комбинации отсутствует ServiceLocator. Но этот компонент я ввёл для специальной обработки многокритериального выбора от простой функции Map — выдачи объекта по ключу. Нужный ключ к Map должен сформировать ServiceLocator, исходя из признаков, предъявляемых пользователем, и поставить действительно нужный объект.
Re[4]: каким паттерном можно заменить switch
От: Hard_Club  
Дата: 30.12.13 08:33
Оценка:
ZL>>Это из области JEE, компонентов и вэб-фреймворков, как я понимаю, что не может квалифицироваться на решение столь простой проблемы тяжеловесным решением.

ZEN>Это вообще к Java никак не относится.


ZEN>У Джошуа Кириевски разве что в похожей комбинации отсутствует ServiceLocator. Но этот компонент я ввёл для специальной обработки многокритериального выбора от простой функции Map — выдачи объекта по ключу. Нужный ключ к Map должен сформировать ServiceLocator, исходя из признаков, предъявляемых пользователем, и поставить действительно нужный объект.


У этого Джошуа — ServiceLocator + Command.
Здесь в других ветках предлагалось — State или Strategy/Factory + FactoryRepository

Так все же???
Re: каким паттерном можно заменить switch
От: TarasB  
Дата: 30.12.13 08:40
Оценка:
Здравствуйте, Hard_Club, Вы писали:

H_C>Если есть конструирование объекта с помощью вложенного switch с помощью анализа некоторых признаков, то каким паттерном проектирования / примитивом это можно перекрыть?


А надо ли?
Re[2]: каким паттерном можно заменить switch
От: Antei США  
Дата: 31.12.13 01:46
Оценка:
Здравствуйте, TarasB, Вы писали:

TB>Здравствуйте, Hard_Club, Вы писали:


H_C>>Если есть конструирование объекта с помощью вложенного switch с помощью анализа некоторых признаков, то каким паттерном проектирования / примитивом это можно перекрыть?


TB>А надо ли?

Если SWITCH — большой, то, в принципе, не помешает: ведь анализируется всего один параметр и принимается решение как конструировать, если всё это распихать по Command Map/Command патернам с правильно названными классами, будет читаться нормально.

Но это — простой и понятный случай, в SWITCH один параметр. Вот мне бы интересно мнение сообщества если здесь бы был не SWITCH а несколько экранов IF'ов где анализируются несколько параметров и в ветках по разному конструируется один и тот же объект.
Как определить ту границу когда стоит оставить метод с IF'ами где, в принципе, логика собрана в одном месте, либо раскидать эту логику по разным классам следуя каким-либо паттернам? Кто что думает?
Re[3]: каким паттерном можно заменить switch
От: devcoach  
Дата: 31.12.13 06:35
Оценка:
Здравствуйте, Antei, Вы писали:

A>Но это — простой и понятный случай, в SWITCH один параметр. Вот мне бы интересно мнение сообщества если здесь бы был не SWITCH а несколько экранов IF'ов где анализируются несколько параметров и в ветках по разному конструируется один и тот же объект.

A>Как определить ту границу когда стоит оставить метод с IF'ами где, в принципе, логика собрана в одном месте, либо раскидать эту логику по разным классам следуя каким-либо паттернам? Кто что думает?
Универсальных рецептов нет. Это то, что по модному именуется "common sense".
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.