Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Первое, что вы заметите, когда первый раз скомпилируете приложение под NFX, это — как быстро пройдет компиляция.
А можно ли использовать NFX в IoC устройствах?
К сожалению, JSON, по ряду конкретных причин, плохо подходит для конфигурационных файлов.
Насколько понимаю, количество referenced assembly сильно влияет на время компиляции.
Здесь у нас 1 шт.
Обычно на моем лаптопе приложения, с кот.я работаю, компилируются несколько [ десятков] секунд. А здесь — доли секунд.
C JSON: один пример: нет стандартного метода задавать имя объекта. Т.к. к примеру, class Test. В XML будет: <ns:Test>…, а в JSON: { _name: «Test»… что-то типа этого, т.е.выдумывать нестандартные методы, чем, кстати, многие и занимаются.
Какая разница 5 сек или 0.5 сек. Пусть даже 30 сек. на компиляцию — это совершенно неважно.
«имя объекта», тоже лажанулся. должно быть «имя класса».
xsi:type, в JSON — $type. Другое дело, что и там, и там без него чаще всего можно обойтись, если продумать семантику документа.Как я это сделаю в JSON?
Давайте будем считать laconic расширением JSON, заточенным под данную задачу.
{
"server": {
"type": "local",
"bindings": [
{ "type": "sync", "tcp-window": "16k" },
{ "type": "async", "tcp-window": "16k" }
],
"welcome": "«Hello {0}, \n— you have connected to {1}»"
}
}
friend=true
{
type="Oslik"
name="Drug Ezhika"
}
node=45{}
А если ноуд с таким именем уже есть?Я просто не будут выбирать это имя для других нодов.
c:\>dosomething.exe "c:\input.file" "d:\output.file" -compress level=100 method=zip -shadow fast -large
[args ?1="c:\input.file" ?2="c:\output.file"]
[compress level="100" method="zip"]
[shadow ?1="fast"]
[large]
[Config]
public int CompressionLevel....
instrumentation
{
name="Instruments"
interval-ms="4395"
//self-instrumented=true
/* provider
{
name="Telemetry Instrumentation Provider"
type=$(/gv/types/$instr-nop)
} */
provider
{
name="Telemetry Instrumentation Provider"
type=$(/gv/types/$instr-telemetry)
use-log="false"
receiver-node="sync://127.0.0.1:$(/gv/services/$sync-telemetry)"
}
}
neponyatno pochemy vse zaziklilos na JSON.
Skajite, pochemy configurazija ne mojet byt' naprimer v baze ili commandnoi stroke ili v Mongo documentax?
Pochemy configurazija ne mojet «sobiratsya» dynamicheski is raznix fomatov (naprimer v baze polya, v file XML)?
Da mojno ispolzovat JSON kak ODIN IZ formatov, no on ochen neudoben.
da i strukturno v JSONE v prinzipe net noudov chistoi ierarxii kotorie est v XMLe tom je
friend{name=«Ezhik» age=3 type=«CloseFriendConnection»}friend: {name: "Ezhik", age: 3, type: "CloseFriendConnection"}
connect
{
site=http://yahoo.com{}
site=http://google.com{name=«Google» type=""}
}
connect:
[
"http://yahoo.com",
{"http://google.com": {name: "Google", type: ""}}
]
group
{
friend{}
friend{}
}
i teper nado delat array na JSONe, v etom i ne udobstvo.
To pole, to array.
JSON eto OBJECT NOTATION format. XML i Laconix eto DATA delimitation format
<connect>
<site>http://yahoo.com</site>
<site name="Google" type="...">http://google.com</site>
</connect>
posmotrite, u vas «yahoo» eto string v arraye, a google eto object s property imenem «google.com»
vas ot etogo ne korobit?
connect:
[
{"http://yahoo.com": null},
{"http://google.com": {name: "Google", type: ""}}
]
ya ne poimu smisla voobshe etogo voprosa. ya otvetil: JSON eto OBJECT notation format.
Dlya postroeniya ABSTRACTNIX ierarxiy pamyati on neudoben
Naprimer vy mojete imet xot 100 noudov s odnim i tem je imenem.
tests { test { ... } test { ... } } serializers { serializer { ... } serializer { ... } }
Esli vam lichno nujen JSON eto vashe pravo, no vy ubedites sami chto isplzovat ego vmesto Laconic formata v razy neudobnee.
Где можно взять пакет для чтения laconic, чтобы я мог в этом убедиться?
Vy mne predlagaete pisat' config v kajdom projekte svoi s nylya?
zeliy framework, kotoriy imeet okolo 10+ features: macros, variables, recursion, injection etc…
foreach(var tnode in node[CONFIG_TESTS_SECTION].Children.Where(cn => cn.IsSameName(CONFIG_TEST_SECTION))) (серьезно? строковые константы? два уровня вложенности для простого массива?) можно было писать foreach(var tnode in node.Tests).Laconic mojno chitat xot na urovne Lexera xot parsera no zachem?
vam nujno Configuration a ne Laconic. Laconinc, command args ili XML eto ne vajno — on sam vse poimet.
ya ponimaju o chem vy govorite
K sojaleniju «zaxvat» features kotoriy obespechivaet NFX ne ocheviden v scope takix statei kak zdes
Typizazii configa sdelanav NFX no ne tak kak vami ojidaetsya. Delo v tom chto config eto kak raz prekrasnoe mesto (takje kak DataAccess) dlya dynamic-like languages.
node.Tests вместо node[CONFIG_TESTS_SECTION].Children.Where(cn => cn.IsSameName(CONFIG_TEST_SECTION)).To chto tam napisan kod po injekzii dependencies — eto sdelano spezialno, no sut ne v etom
mojno NFX zelikom t.k on UNISTACK.
NFX conf existed back in 2003...
how can I include a file hosted on a DropBox account as one of my conf sub-nodes?
NFX conf existed back in 2003...sorryПервый релиз дропбокса состоялся в 2008-ом году. Вам в 2003-ем таки удалось нормально собрать libastral, не иначе. А вообще HOCON умеет грузить куски конфигов из интернета. По остальным двум вопросам ничего не могу сказать, т. к. не возникала ни разу необходимость в подобном. По мержу можно подробнее посмотреть тут.
This is irrelevant. In NFX we havd a concept of a FileSystem, back then I supported WEB and local.
url(), никто не мешает сделаеть свой протокол с обработчиком. Реализация в akka.net вообще принимает делегат, который позволяет как угодно порезолвить включения.include svn://path, стало include git://path)v tom chto eto ispolzuetsya v desyatkax nest, takix kak ustanoivka programmnogo obespecheniya na servera.
vy vse pytaetes dokazat chto u vas ne Unistack i vy s etim happy.
u vas vyigrish budet togda kogda vy poimete chto pishete odno i tozhe 25 raz v kajdom proekete na 3x yazikax i 10 formatax…
System.Configuration для этого нездорово громоздок, с этим никто не спорит. Но любое другое решение, позволяющее сериализовать и прочитать граф, справится на ура. XML? Да (писать много буков, правда). JSON? Да. YAML? Да.foreach(var snode in node[CONFIG_SERIALIZERS_SECTION].Children.Where(cn => cn.IsSameName(CONFIG_SERIALIZER_SECTION)))
{
var item = FactoryUtils.Make<Serializer>(snode, args: new object[]{this, snode});
m_Serializers.Register( item );
}
есть очень интересное видео про одно приложение NFX (для кэша, с какими-то сумасшедшими заявленными числами)
Как конфигурация влияет на архитектуру приложения