Pjattaforma "1C: Enterprise" - x'hemm taħt il-barnuża?

Ħej Habr!
F'dan l-artikolu ser nibdew l-istorja dwar kif taħdem ġewwa pjattaforma "1C:Intrapriża 8" u liema teknoloġiji jintużaw fl-iżvilupp tiegħu.

Pjattaforma "1C: Enterprise" - x'hemm taħt il-barnuża?

Għaliex naħsbu li dan huwa interessanti? L-ewwelnett, minħabba li l-pjattaforma 1C:Enterprise 8 hija applikazzjoni kbira (aktar minn 10 miljun linja ta 'kodiċi) f'C++ (klijent, server, eċċ.), JavaScript (klijent tal-web), u, aktar reċentement, U Java. Proġetti kbar jistgħu jkunu interessanti għall-inqas minħabba l-iskala tagħhom, minħabba li kwistjonijiet li huma inviżibbli f'bażi ​​ta 'kodiċi żgħira jinqalgħu fis-seħħ sħiħ fi proġetti bħal dawn. It-tieni, "1C:Enterprise" huwa prodott replikabbli, "b'kaxxa", u hemm ftit artikli dwar żviluppi bħal dawn fuq Habré. Huwa wkoll dejjem interessanti li tkun taf kif inhi l-ħajja f'timijiet u kumpaniji oħra.

Mela ejja nibdew. F'dan l-artikolu se nagħtu ħarsa ġenerali lejn xi wħud mit-teknoloġiji li jintużaw fil-pjattaforma u niddeskrivu l-pajsaġġ, mingħajr ma nidħlu fil-fond fl-implimentazzjoni. Tabilħaqq, għal ħafna mekkaniżmi, storja dettaljata tkun teħtieġ artiklu separat, u għal xi wħud, ktieb sħiħ!
Biex tibda, ta 'min jiddeċiedi dwar l-affarijiet bażiċi - x'inhi l-pjattaforma 1C:Enterprise u f'liema komponenti tikkonsisti. It-tweġiba għal din il-mistoqsija mhix daqshekk sempliċi, minħabba li t-terminu "Pjattaforma" (għall-qosor, aħna se nsejħulha hekk) jirreferi għal mezz għall-iżvilupp ta 'applikazzjonijiet tan-negozju, ambjent runtime, u għodod ta' amministrazzjoni. Il-komponenti li ġejjin jistgħu jiġu distinti bejn wieħed u ieħor:

  • cluster tas-server
  • Klijent "rqiq" kapaċi jgħaqqad mas-server permezz tal-http u l-protokoll binarju tiegħu stess
  • klijent biex jaħdem f'arkitettura b'żewġ saffi b'database li tinsab fuq hard drive jew folder tan-netwerk
  • klijent tal-web
  • għodod għall-amministrazzjoni tas-server tal-applikazzjonijiet
  • ambjent ta' żvilupp (magħruf bħala Konfiguratur)
  • ambjent runtime għal iOS, Android u Windows Phone (pjattaforma mobbli 1C)

Dawn il-partijiet kollha, bl-eċċezzjoni tal-klijent tal-web, huma miktuba f'C++. Barra minn hekk, hemm l-imħabbra reċentement Konfiguratur ta 'ġenerazzjoni ġdida, miktuba bil-Java.

Apps indiġeni

C ++ 03 jintuża biex jiġu żviluppati applikazzjonijiet indiġeni. Għall-Windows, Microsoft Visual C++ 12 (profil kompatibbli mal-Windows XP) jintuża bħala kompilatur, u għal Linux u Android - gcc 4.8, għal iOS - clang 5.0. Il-librerija standard użata hija l-istess għas-sistemi operattivi u l-kompilaturi kollha - STLPort. Din is-soluzzjoni tnaqqas il-probabbiltà ta 'żbalji speċifiċi għall-implimentazzjoni STL. Bħalissa qed nippjanaw li nemigraw lejn l-implimentazzjoni STL mibgħuta ma 'CLang, peress li STLPort twaqqaf u huwa inkompatibbli mal-modalità C++11 attivata ta' gcc.
Il-bażi tal-kodiċi tas-server hija 99% komuni, dik tal-klijent - 95%. Barra minn hekk, anke l-pjattaforma mobbli tuża l-istess kodiċi C++ bħal dak "kbir", għalkemm il-persentaġġ ta 'unifikazzjoni hemm huwa kemmxejn aktar baxx.
Bħal ħafna mill-utenti tas-C++, aħna ma nippretendux li nużaw 100% tal-kapaċitajiet tal-lingwa u l-libreriji tagħha. Allura, aħna prattikament ma nużawx Boost, u waħda mill-karatteristiċi tal-lingwa hija l-ikkastjar tat-tip dinamiku. Fl-istess ħin, aħna nużaw b'mod attiv:

  • STL (speċifikament kordi, kontenituri u algoritmi)
  • wirt multiplu, inkl. wirt implimentazzjoni multipla
  • mudelli
  • eċċezzjonijiet
  • indikaturi intelliġenti (implimentazzjoni apposta)

Bl-użu ta 'wirt multiplu ta' interfaces (klassijiet kompletament astratti), isir possibbli mudell ta 'komponent, li se jiġi diskuss hawn taħt.

Komponenti

Biex tiġi żgurata l-modularità, il-funzjonalità kollha hija maqsuma f'komponenti, li huma libreriji dinamiċi (*.dll għall-Windows, *.so għal Linux). B'kollox hemm aktar minn mija u ħamsin komponent; hawn deskrizzjonijiet ta' xi wħud minnhom:

backend
Fih il-magna tal-metadata tal-pjattaforma

accnt
Oġġetti li l-iżviluppaturi tal-applikazzjoni jużaw biex jibnu rekords tal-kontabilità (mapep tal-kontijiet u reġistri tal-kontabilità)

bsl
Magna tal-eżekuzzjoni tal-lingwa inkorporata

nuke
Implimentazzjoni apposta tal-allokatur tal-memorja

dbeng8
Magna tad-database tal-fajls. Magna ta 'database ta' server ta 'fajls sempliċi bbażata fuq ISAM, li tinkludi wkoll proċessur SQL sempliċi

wbase
Fih il-klassijiet bażi u l-funzjonijiet għall-implimentazzjoni tal-interface tal-utent tal-Windows - klassijiet tat-twieqi, aċċess GDI, eċċ.

Il-qsim f'ħafna komponenti huwa utli minn diversi punti di vista:

  • Is-separazzjoni tippromwovi disinn aħjar, b'mod partikolari iżolament aħjar tal-kodiċi
  • Minn sett ta 'komponenti tista' tiġbor b'mod flessibbli għażliet ta 'kunsinna differenti:
    • Per eżempju, installazzjoni thin client se jkun fiha wbase, iżda mhux se jkollha backend
    • iżda fuq is-server wbase, għall-kuntrarju, mhux se jkun
    • iż-żewġ għażliet naturalment se jkun fihom nuke u bsl

Il-komponenti kollha meħtieġa għal din l-għażla tat-tnedija huma mgħobbija meta jibda l-programm. Dan, b'mod partikolari, huwa meħtieġ għar-reġistrazzjoni tal-klassijiet SCOM, li se jiġu diskussi hawn taħt.

SCOM

Għal dekompożizzjoni f'livell aktar baxx, tintuża s-sistema SCOM, librerija simili fl-ideoloġija għal ATL. Għal dawk li ma ħadmux ma 'ATL, aħna niżżlu fil-qosor il-kapaċitajiet u l-karatteristiċi ewlenin.
Għal klassi SCOM iddisinjata apposta:

  • Jipprovdi metodi tal-fabbrika li jippermettulek toħloq klassi minn komponent ieħor li tkun taf isimha biss (mingħajr ma tiżvela l-implimentazzjoni)
  • Jipprovdi infrastruttura tal-pointer intelliġenti li tgħodd ir-referenza. Il-ħajja tal-klassi SCOM m'għandhiex għalfejn tiġi mmonitorjata manwalment
  • Jippermettilek issir taf jekk oġġett jimplimentax interface speċifiku u awtomatikament jikkonverti pointer għall-oġġett għal pointer għall-interface
  • Oħloq oġġett tas-servizz li huwa dejjem aċċessibbli permezz tal-metodu get_service, eċċ.

Per eżempju, tista 'tiddeskrivi klassi għall-qari JSON (per eżempju, JSONStreamReader) fil-komponent json.dll.
Klassijiet u istanzi jistgħu jinħolqu minn komponenti oħra; jeħtieġ li jiġu rreġistrati fil-magna SCOM:

SCOM_CLASS_ENTRY(JSONStreamReader)

Din il-makro se tiddeskrivi klassi speċjali ta 'reġistratur statiku, li l-kostruttur tagħha se jissejjaħ meta l-komponent jitgħabba fil-memorja.
Wara dan, tista 'toħloq eżempju tagħha f'komponent ieħor:

IJSONStreamReaderPtr jsonReader = create_instance<IJSONStreamReader>(SCOM_CLSIDOF(JSONStreamReader));

Biex jappoġġja s-servizzi, SCOM joffri infrastruttura addizzjonali, pjuttost kumplessa. Ċentrali għalih huwa l-kunċett ta 'proċess SCOM, li jservi bħala kontenitur għat-tmexxija tas-servizzi (jiġifieri, għandu r-rwol ta' Servizz Locator), u fih ukoll rabta mar-riżorsi lokalizzati. Il-proċess SCOM huwa marbut mal-ħajt tal-OS. Grazzi għal dan, ġewwa l-applikazzjoni tista' tirċievi servizzi bħal dawn:

SCOM_Process* process = core::current_process();
if (process)
         return get_service<IMyService>(process);

Barra minn hekk, billi taqleb proċessi loġiċi (SCOM) marbuta ma 'ħajta, tista' tikseb applikazzjonijiet li huma prattikament indipendenti mil-lat tal-ispazju tal-informazzjoni, li jaħdmu fl-istess ħajta. Dan huwa kif il-klijent irqiq tagħna jaħdem ma 'database ta' fajls - ġewwa proċess OS wieħed hemm żewġ proċessi SCOM, wieħed assoċjat mal-klijent, u t-tieni mas-server. Dan l-approċċ jippermettilna ngħaqqdu l-kitba tal-kodiċi li se taħdem kemm fuq id-database tal-fajls lokali kif ukoll fil-verżjoni "reali" klijent-server. Il-prezz għal tali uniformità huwa overhead, iżda l-prattika turi li huwa worth it.

Ibbażat fuq il-mudell tal-komponent SCOM, kemm il-loġika tan-negozju kif ukoll il-parti tal-interface ta '1C: Enterprise huma implimentati.

Interface tal-utent

Mill-mod, dwar interfaces. Aħna ma nużawx kontrolli standard tal-Windows; il-kontrolli tagħna huma implimentati direttament fuq l-API tal-Windows. Għall-verżjoni Linux, sar saff li jaħdem permezz tal-librerija wxWidgets.
Il-librerija tal-kontrolli ma tiddependix fuq partijiet oħra ta '1C:Enterprise u tintuża minna f'diversi utilitajiet interni żgħar oħra.

Matul is-snin ta 'żvilupp ta' 1C:Enterprise, id-dehra tal-kontrolli nbidlet, iżda bidla serja fil-prinċipji seħħet darba biss, fl-2009, bir-rilaxx tal-verżjoni 8.2 u l-miġja ta '"formoli ġestiti". Minbarra li tbiddel id-dehra, il-prinċipju tat-tqassim tal-forma nbidel b'mod fundamentali - kien hemm rifjut tal-ippożizzjonar pixel b'pixel tal-elementi favur it-tqassim tal-fluss tal-elementi. Barra minn hekk, fil-mudell il-ġdid, il-kontrolli ma jaħdmux direttament ma 'oġġetti tad-dominju, iżda ma' DTOs speċjali (Oġġetti ta' Trasferiment tad-Data).
Dawn il-bidliet għamluha possibbli li jinħoloq klijent tal-web 1C:Enterprise li jirreplika l-loġika C++ tal-kontrolli JavaScript. Nippruvaw inżommu ekwivalenza funzjonali bejn thin u web clients. F'każijiet fejn dan ma jkunx possibbli, pereżempju minħabba limitazzjonijiet tal-API JavaScript disponibbli (pereżempju, il-kapaċità li taħdem ma 'fajls hija limitata ħafna), aħna ħafna drabi nimplimentaw il-funzjonalità meħtieġa bl-użu ta' estensjonijiet tal-browser miktuba f'C++. Bħalissa nappoġġjaw l-Internet Explorer u Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows u Linux) u Safari (MacOS).

Barra minn hekk, it-teknoloġija tal-formoli ġestiti tintuża biex tinħoloq interface għal applikazzjonijiet mobbli fuq il-pjattaforma 1C. Fuq apparat mobbli, l-għoti tal-kontrolli huwa implimentat bl-użu ta 'teknoloġiji indiġeni għas-sistema operattiva, iżda għall-loġika tat-tqassim tal-forma u r-rispons tal-interface, jintuża l-istess kodiċi bħal fil-pjattaforma "kbir" 1C:Enterprise.

Pjattaforma "1C: Enterprise" - x'hemm taħt il-barnuża?
1C interface fuq Linux OS

Pjattaforma "1C: Enterprise" - x'hemm taħt il-barnuża?
1C interface fuq apparat mobbli

1C interface fuq pjattaformi oħra Pjattaforma "1C: Enterprise" - x'hemm taħt il-barnuża?
1C interface fuq Windows OS

Pjattaforma "1C: Enterprise" - x'hemm taħt il-barnuża?
Interface 1C - klijent tal-web

sors miftuħ

Għalkemm aħna ma nużawx libreriji standard għall-iżviluppaturi C++ taħt Windows (MFC, kontrolli minn WinAPI), aħna ma niktbux il-komponenti kollha aħna stess. Il-librerija diġà ssemmiet wxWidgets, u nużaw ukoll:

  • curl għall-ħidma ma HTTP u FTP.
  • OpenSSL biex taħdem bil-kriptografija u tistabbilixxi konnessjonijiet TLS
  • libxml2 u libxslt għall-parsing XML
  • libetpan biex taħdem ma' protokolli tal-posta (POP3, SMTP, IMAP)
  • mimetiku biex jiġu analizzati messaġġi email
  • sqllite għall-ħażna ta' zkuk tal-utenti
  • ICU għall-internazzjonalizzazzjoni

Il-lista tkompli.
Barra minn hekk, nużaw verżjoni modifikata ħafna Test tal-Google и Google Mock meta tiżviluppa testijiet unitarji.
Il-libreriji kienu jeħtieġu adattament biex ikunu kompatibbli mal-mudell ta' organizzazzjoni tal-komponenti SCOM.
Il-prevalenza ta '1C tagħmel il-pjattaforma test eċċellenti ta' saħħa għal-libreriji użati fiha. Varjetà ta 'utenti u xenarji malajr jiżvelaw żbalji anke fl-oqsma tal-kodiċi li jintużaw l-aktar rari. Aħna nikkoreġuhom aħna u nippruvaw nagħtuhom lura lill-awturi tal-librerija. L-esperjenza tal-interazzjoni tirriżulta li hija differenti ħafna.
Developers curl и libetpan jirrispondu malajr għal pull-talbiet, iżda l-garża, per eżempju, fil OpenSSL Qatt ma rnexxielna nagħtuha lura.

Konklużjoni

Fl-artiklu tmissna diversi aspetti ewlenin tal-iżvilupp tal-pjattaforma 1C: Enterprise. Fl-ambitu limitat tal-artiklu, missejtna biss xi aspetti interessanti, fl-opinjoni tagħna.
Tista' tinstab deskrizzjoni ġenerali tad-diversi mekkaniżmi tal-pjattaforma hawn.
Liema suġġetti jkunu ta’ interess għalik f’artikli futuri?

Kif hija implimentata l-pjattaforma mobbli 1C?
Deskrizzjoni tal-istruttura interna tal-klijent tal-web?
Jew forsi inti interessat fil-proċess li tagħżel karatteristiċi għal ħarġiet ġodda, tiżviluppa u tittestja?

Ikteb fil-kummenti!

Sors: www.habr.com

Żid kumment