metaclass: (Default)
[personal profile] metaclass
https://github.com/SparkViewEngine/spark/blob/master/src/Samples/DirectUsage/ConsoleTemplating/Services/MessageBuilder.cs

А вот насколько подобный код (статик _instance и его инициализация) является кошерным? Ну с interlocked все более-менее понятно, а вот собственно использование синглетонов вместо всяких модных IoC и тому подобного усложняющего все трэша?

Date: 2014-05-20 08:04 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
>Например, логгер, он может быть архитектурно один на все приложение.

Вообще говоря, должна теоретически быть возможность протащить свой логгер в каждую подсистему. Поэтому идея архитектурно одного логгера на все приложение тоже выглядит достойной заявкой на посадку на кол.

В целом, единственной причиной для существования синглтонов мне видится неготовность народа таскать состояние явно. В то же время сам факт допущения использования синглтонов неизбежно создает риск ситуаций, описанных ребе Метаклассом.
Edited Date: 2014-05-20 08:28 pm (UTC)

Date: 2014-05-20 08:35 pm (UTC)
From: [identity profile] vp.livejournal.com
При нормальной архитектуре нет никаких проблем, допустим, через параметры конструкторов классов передавать нужные экземпляры классов. Но с другой стороны это может загромождать инициализацию, когда тебе нужно передать n+1 разных контекстов, без которых никак. :)

Date: 2014-05-20 08:42 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
В указанной ситуации вполне можно использовать фабрики классов, в которые можно положить n+m контекстов заранее.

Date: 2014-05-20 08:49 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Ад паттернов. :)

Date: 2014-05-20 08:53 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
Переходите на хаскель =).

Date: 2014-05-20 08:51 pm (UTC)
From: [identity profile] vp.livejournal.com
Имхо наименее симпатичное из решений.

Date: 2014-05-20 08:53 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
Оно зато работает и не вызывает проблем. Если так уж не хочется таскать контексты явно.

Date: 2014-05-20 08:54 pm (UTC)
From: [identity profile] vp.livejournal.com
А в какой момент вы предлагаете доставать мой контекст из общей фабрики? До вызова конструктора, затем передавая его в конструктор, или в самом конструкторе?
И что будет ключом в том и ином случае?

Date: 2014-05-20 08:59 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Причем тут ключ воще? Фабрика это условно говоря класс с десятком полей ссылающихся на куски контекста и одним методом типа "CreateЧегоНибудь" вызывающим конструктор с передачей в него контекстов.
Меня этот вариант тащемта напрягает адом паттернов, написанием классов ради того чтобы писать классы.

Date: 2014-05-20 09:03 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
Да мне самому не нравится. Я б предпочел пропихивать контексты явно, если лень писать полный список каждый раз - предоставить возможность завернуть их в какой-то обертке и пропихивать в конструктор получившийся кулек. Ну или еще лучше - использовать монадки.

Date: 2014-05-20 09:00 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
В описанной ситуации я бы таскал в объекте ссылку на фабрику, переданную в конструкторе.

Но это, понятное дело, разговоры в пользу бедных, поскольку какая инфраструктура сложилась, с такой и придется жить. XML-парсер, например, свой писать никому не хочется.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 20th, 2025 10:09 am
Powered by Dreamwidth Studios