|
|
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Всем привет. Есть сервис принимающий на вход события разных типов. Для каждого типа события есть фабрика с помощью которой порождаются специфичные для этого типа события объекты. Пока все норм, но есть нюанс - может ли объект порожденный фабрикой содержать в себе ссылку на родительскую фабрику (для получения других объектов из фабрики), к чему это может привести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 16:56 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJack, А почему она не static final? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 17:15 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJackможет ли объект порожденный фабрикой содержать в себе ссылку на родительскую фабрику Может eJackк чему это может привести? К чему угодно. Например к сильной связности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 17:18 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Если ссылка - интерфейс, то всё ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 17:24 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
ЛагманЕсли ссылка - интерфейс, то всё ок. осталось рассмотреть всё многообразие ситуаций)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 17:42 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Petro123осталось рассмотреть всё многообразие ситуаций)) В точку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 17:42 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro123осталось рассмотреть всё многообразие ситуаций)) В точку. вот все именно так! это и пугает - где то косячу в архитектуре ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 19:03 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJackвот все именно так! это и пугает - где то косячу в архитектуре На "концептуальный" вопрос можно дать только "концептуальный" ответ. А если взять конкретный случай, то всё может отказаться совершенно иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 19:07 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJackможет ли объект порожденный фабрикой содержать в себе ссылку на родительскую фабрику может ли элемент дерева - Node содержать в себе указатель на родителя? - может. может ли Кнопка иметь ссылку на родителя - Форму где лежит? и т.д. Короче, это пуповина ))) LOL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 19:19 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
BlazkowiczeJackвот все именно так! это и пугает - где то косячу в архитектуре На "концептуальный" вопрос можно дать только "концептуальный" ответ. А если взять конкретный случай, то всё может отказаться совершенно иначе. Ок. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. собственно для всех типов событий наследуются все типы и переопределяются методы в них. так вот приходит событие: Получаем фабрику методом EventFactory.getFactory(...) Получаем наследника Executor через getExecutor() И добавляем его в ExecutorService далее когда начинается выполнятся executer - внутри него создаются объекты Mapper и т.д. которые есть в фабрике. собственно Executer содержит ссылку на породившую его фабрику. Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 20:21 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
многабукаффeJackBlazkowiczпропущено... На "концептуальный" вопрос можно дать только "концептуальный" ответ. А если взять конкретный случай, то всё может отказаться совершенно иначе. Ок. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. собственно для всех типов событий наследуются все типы и переопределяются методы в них. так вот приходит событие: Получаем фабрику методом EventFactory.getFactory(...) Получаем наследника Executor через getExecutor() И добавляем его в ExecutorService далее когда начинается выполнятся executer - внутри него создаются объекты Mapper и т.д. которые есть в фабрике. собственно Executer содержит ссылку на породившую его фабрику. Код: java 1. 2. 3. 4. Ну, и что мешает в BaseExecutor добавить метод setParentFactory(EventFactory factory) ? А перед выдачей Executor сделать присвоение... Правда придётся немного переделать реализацию метода getExecutor(). Например вот так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Соответственно конкретная фабрика должна будет реализовать не getExecutor(), а internalGetExecutor(). Но здесь есть и обратная сторона медали - Executor будет жестко завязан с фабрикой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 21:43 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Alex Kuznetsov, Вы наверное не внимательно читали (или я не понятно описал), но суть вопроса не как реализовать ссылку на родительскую фабрику, меня интересует опыт такой реализации, какие потом были проблемы, плюсы и минусы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 00:26 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJackплюсы и минусы. Минус - лишняя ссылка в памяти. :) Минус - фабрика будет жить в памяти пока жив хоть один потомок. :) Плюс - можно узнать какая фабрика создала объект, особенно если генератор ее синглтона сделан непотокобезапасным. P.S. надеюсь сеарилизовать объект будете без фабрики? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 00:59 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJackAlex Kuznetsov, Вы наверное не внимательно читали (или я не понятно описал), но суть вопроса не как реализовать ссылку на родительскую фабрику, меня интересует опыт такой реализации, какие потом были проблемы, плюсы и минусы.Вроде внимательно прочитал. Посмотрим: автор... может ли объект порожденный фабрикой содержать в себе ссылку на родительскую фабрику (для получения других объектов из фабрики), к чему это может привести? Да, на эти вопросы были даны ответы. Так что сорри, мой ответ про реализацию - пук в воду... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 06:41 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев P.S. надеюсь сеарилизовать объект будете без фабрики? не планировал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 10:12 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJackСергей АрсеньевP.S. надеюсь сеарилизовать объект будете без фабрики? не планировал :) не планировал сеарилизовать фабрику :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 10:16 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJack, А по-моему, "чистота шаблона" обеспечивается только тем, что каждый создаваемый Executor уже содержит в себе все необходимые свойства. Если хотите, чтобы "почти одинаковые" Executor отличались поведением в зависимости от породившей фабрики - разделяйте их на два (3, 5, 10) разных реализаций Executor и в них уже реализуйте все отличия, чтобы не морочить потом людям голову необходимостью использовать что-то кроеме execute(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 11:19 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJack, кажется, я догадался о вашей "сверхзадаче" - создавать "один и тот же объект" разными фабриками (интересно, как это вообще может вписаться в этот шаблон?) - и впоследствии нарушить 1-е правило что не должно быть зависомости от того, как создаются объекты. Те, кто потом наткнутся на этот ваш "шаблон" придут в большое недоумение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 11:54 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Пылинкасоздавать "один и тот же объект" разными фабрикам imho наоборот. Фабрика создала "Самолёт". Самолёт из фабрики сам создал "Правое крыло". Т.е. как будто фабрика глобальный синглетон или инжектится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 12:10 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Petro123, Извиняюсь, я не готов к такой дискуссии - про крылья ( к тому же даже не указано, о какой "фабрике" идет речь) Но в любом случае, если работа идет на уровне интерфейсов, то не стоить вносить зависимость в объекты (одного типа) запоминая их историю создания, это как раз спагетти и получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 13:06 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Пылинкане стоить вносить зависимость в объекты (одного типа) запоминая их историю создания я не увидел ничего криминального в "ссылках на родителя. Фабрика это или ещё что". А додумывать за автора смысла нет. Он весь код-ТЗ не привёл. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 13:17 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Да все просто - есть событие Event. События различаются по типу - EventType (String). Так же каждое событие содержит специфичные для этого типа данные. Каждый тип события имеет свой специфический путь (шаблон) обработки. Каждый тип события обрабатывается с определенным приоритетом. Это было общее (приближенное к реальному) ТЗ. Далее Получаем событие. По типу получаем фабрику. Из фабрики получаем Executor и кладем его в в очередь на обработку (тут на самом деле все немного сложнее, но это не меняет сути). Когда очередь доходит до Execotor (начинается выполнение), он обращается к родительской фабрики (через ссылку) и создает необходимые для этого типа события объекты. Например парсер (для получения данных события), мапперы, трансформаторы, шаблон обработки (шаблонный метод). Все это через родительскую фабрику. ПылинкаeJack, А по-моему, "чистота шаблона" обеспечивается только тем, что каждый создаваемый Executor уже содержит в себе все необходимые свойства. Если хотите, чтобы "почти одинаковые" Executor отличались поведением в зависимости от породившей фабрики - разделяйте их на два (3, 5, 10) разных реализаций Executor и в них уже реализуйте все отличия, чтобы не морочить потом людям голову необходимостью использовать что-то кроеме execute() . "Чистота шалбона" не цель. Фактически вы предлагаете перенести функции фабрики в Executor (если я правильно уловил мысль), думал об этом, но как по мне сути это не поменяет - хотя может и будет более логичным (но тоже спорно). Про морочить голову не понял мысли ? Поясните - что сейчас не так? ПылинкаeJack, кажется, я догадался о вашей "сверхзадаче" - создавать "один и тот же объект" разными фабриками (интересно, как это вообще может вписаться в этот шаблон?) - и впоследствии нарушить 1-е правило что не должно быть зависомости от того, как создаются объекты. Те, кто потом наткнутся на этот ваш "шаблон" придут в большое недоумение. не понял откуда такое умозаключение? шаблон абстрактная фабрика - где и что я нарушил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 14:12 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJackДа все просто - есть событие Event. События различаются по типу - EventType (String). Так же каждое событие содержит специфичные для этого типа данные. Каждый тип события имеет свой специфический путь (шаблон) обработки. Каждый тип события обрабатывается с определенным приоритетом. В таком случае, я недоумеваю - зачем хранить ссылку, когда фабрику можно снова получить в любой нужный момент, точно так же, обычным путем? PS Я ничего вообще не предлагал, это ваше решение как раз превращает Executor в фабрику, я лишь попытался наййти этому какое-то разумное объяснение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 11:58 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
ПылинкаeJackДа все просто - есть событие Event. События различаются по типу - EventType (String). Так же каждое событие содержит специфичные для этого типа данные. Каждый тип события имеет свой специфический путь (шаблон) обработки. Каждый тип события обрабатывается с определенным приоритетом. В таком случае, я недоумеваю - зачем хранить ссылку, когда фабрику можно снова получить в любой нужный момент, точно так же, обычным путем? PS Я ничего вообще не предлагал, это ваше решение как раз превращает Executor в фабрику, я лишь попытался наййти этому какое-то разумное объяснение. Тривиально не получите - так как для получения фабрики используется название типа события, но оно не прокидывается в Executor. Да и тогда получается что давайте все свяжем "сильными" ссылками ну их эти паттерны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 13:42 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38549614&tid=2127658]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
161ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 430ms |

| 0 / 0 |
