|
|
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#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 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJack, не понял, почему не одна фабрика на все события. Событие - это тоже метатип объекта. eJackтак как для получения фабрики используется название типа события ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 14:07 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Petro123eJack, не понял, почему не одна фабрика на все события. Событие - это тоже метатип объекта. eJackтак как для получения фабрики используется название типа события Мы точно все говорим об одно и том же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2014, 08:27 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJack, перепишу свой посыл: - я не понял, почему нельзя так: Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2014, 12:56 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Petro123eJack, перепишу свой посыл: - я не понял, почему нельзя так: Код: java 1. 2. 3. 4. абстрактная фабрика создает семейство объектов - это суть паттерна. У меня у интерфейса (абстрактный класс) более 10 методов get/create - которые создают разные объекты для конкретного типа события. Вот то что я уже писал, еще раз Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Далее - для каждого типа события создается наследник этого класса. Решаемая задача - что из фабрики я получаю объекты именно для конкретного типа сообщения - это и различные DAO, мапперы, конвертеры и т.д. Вы же предлагаете мне написать один мега класс типа: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. но, это не абстрактная фабрика ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2014, 13:43 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
eJackабстрактная фабрика создает семейство объектов - это суть паттерна. разумеется. Просто, если идти не от задачи (функции main), то сложно понять что именно нужно. Суть паттерна в группах, группах в группе и ещё раз в группах Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. т.е. идём от задачи и функции main Так? ... а сама абстрактная фабрика только для того, чтобы всё многообразие объектов передать через одно "игольное ушко" EventProcessor(factoryAll) если это не надо, то шаблон не нужен. Пример чего я и приводил выше. IMHO ______________________________________________ "Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2014, 15:03 |
|
||
|
абстрактная фабрика - концептуальный вопрос
|
|||
|---|---|---|---|
|
#18+
Petro123eJackабстрактная фабрика создает семейство объектов - это суть паттерна. разумеется. Просто, если идти не от задачи (функции main), то сложно понять что именно нужно. Суть паттерна в группах, группах в группе и ещё раз в группах Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. т.е. идём от задачи и функции main Так? ... а сама абстрактная фабрика только для того, чтобы всё многообразие объектов передать через одно "игольное ушко" EventProcessor(factoryAll) если это не надо, то шаблон не нужен. Пример чего я и приводил выше. IMHO ______________________________________________ "Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand. Читайте внимательнее вопрос - суть => Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2014, 10:20 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2127658]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 366ms |

| 0 / 0 |
