Platforma "1C: Enterprise" - kas atrodas zem pÄrsega?
Äau Habr!
Å ajÄ rakstÄ mÄs sÄksim stÄstu par to, kÄ tas darbojas iekÅ”Ä platforma "1C:Enterprise 8" un kÄdas tehnoloÄ£ijas tiek izmantotas tÄ izstrÄdÄ.
āplÄnsā klients, kas spÄj izveidot savienojumu ar serveri, izmantojot http un savu binÄro protokolu
klients darbam divu lÄ«meÅu arhitektÅ«rÄ ar datu bÄzi, kas atrodas cietajÄ diskÄ vai tÄ«kla mapÄ
tīmekļa klients
lietojumprogrammu servera administrÄÅ”anas rÄ«ki
izstrÄdes vide (pazÄ«stama kÄ konfigurators)
izpildlaika vide operÄtÄjsistÄmai iOS, Android un Windows Phone (mobilÄ platforma 1C)
Visas Ŕīs daļas, izÅemot tÄ«mekļa klientu, ir rakstÄ«tas C++ valodÄ. TurklÄt ir nesen paziÅotais JaunÄs paaudzes konfigurators, rakstÄ«ts Java valodÄ.
VietÄjÄs lietotnes
C++03 tiek izmantots vietÄjo lietojumprogrammu izstrÄdei. OperÄtÄjsistÄmai Windows kÄ kompilators tiek izmantots Microsoft Visual C++ 12 (profils, kas ir saderÄ«gs ar Windows XP), savukÄrt Linux un Android - gcc 4.8, iOS - clang 5.0. VisÄm operÄtÄjsistÄmÄm un kompilatoriem izmantotÄ standarta bibliotÄka ir vienÄda - STLPort. Å is risinÄjums samazina STL ievieÅ”anai raksturÄ«gu kļūdu iespÄjamÄ«bu. PaÅ”laik mÄs plÄnojam migrÄt uz STL ievieÅ”anu, kas piegÄdÄta kopÄ ar CLang, jo STLPort ir pÄrtraukta un nav saderÄ«ga ar gcc C++11 iespÄjoto režīmu.
Servera kodu bÄze ir 99% izplatÄ«ta, klienta - 95%. TurklÄt pat mobilÄ platforma izmanto to paÅ”u C++ kodu, ko ālielaisā, lai gan tur apvienoÅ”anÄs procents ir nedaudz mazÄks.
TÄpat kÄ lielÄkÄ daļa C++ lietotÄju, mÄs neapgalvojam, ka izmantojam 100% valodas un tÄs bibliotÄku iespÄjas. TÄtad mÄs praktiski neizmantojam Boost, un viena no valodas funkcijÄm ir dinamiskÄ tipa lieÅ”ana. TajÄ paÅ”Ä laikÄ mÄs aktÄ«vi izmantojam:
Izmantojot vairÄku interfeisu pÄrmantoÅ”anu (pilnÄ«gi abstraktas klases), kļūst iespÄjams komponentu modelis, kas tiks apspriests turpmÄk.
Komponenti
Lai nodroÅ”inÄtu modularitÄti, visa funkcionalitÄte ir sadalÄ«ta komponentos, kas ir dinamiskÄs bibliotÄkas (*.dll Windows, *.so Linux). KopumÄ ir vairÄk nekÄ simts piecdesmit komponenti; Å”eit ir daži no tiem apraksti:
aizmugure
Ietver platformas metadatu dzinÄju
accnt
Objekti, ko lietojumprogrammu izstrÄdÄtÄji izmanto, lai izveidotu grÄmatvedÄ«bas ierakstus (kontu diagrammas un grÄmatvedÄ«bas reÄ£istrus)
bsl
IegultÄ valodas izpildes dzinÄjs
nuke,
PielÄgota atmiÅas sadalÄ«tÄja ievieÅ”ana
dbeng8
Failu datu bÄzes dzinÄjs. VienkÄrÅ”s failu servera datu bÄzes dzinÄjs, kura pamatÄ ir ISAM un kas ietver arÄ« vienkÄrÅ”u SQL procesoru
wbase
Satur bÄzes klases un funkcijas Windows lietotÄja interfeisa ievieÅ”anai - logu klases, GDI piekļuve u.c.
SadalÄ«Å”ana vairÄkos komponentos ir noderÄ«ga no vairÄkiem viedokļiem:
AtdalÄ«Å”ana veicina labÄku dizainu, jo Ä«paÅ”i labÄku koda izolÄciju
No komponentu komplekta jÅ«s varat elastÄ«gi salikt dažÄdas piegÄdes iespÄjas:
PiemÄram, plÄnÄ klienta instalÄcijÄ bÅ«s wbase, bet tai nebÅ«s aizmugursistÄmas
bet wbase serverÄ« gluži otrÄdi tÄ nebÅ«s
abÄs opcijÄs, protams, bÅ«s nuke un bsl
Visi komponenti, kas nepiecieÅ”ami Å”ai palaiÅ”anas opcijai, tiek ielÄdÄti, kad programma tiek startÄta. Tas jo Ä«paÅ”i ir nepiecieÅ”ams, lai reÄ£istrÄtu SCOM klases, kas tiks apspriestas turpmÄk.
SCOM
DekompozÄ«cijai zemÄkÄ lÄ«menÄ« tiek izmantota SCOM sistÄma, kas pÄc ideoloÄ£ijas ir lÄ«dzÄ«ga ATL. Tiem, kuri nav strÄdÄjuÅ”i ar ATL, mÄs Ä«sumÄ uzskaitÄm galvenÄs iespÄjas un funkcijas.
ÄŖpaÅ”i izstrÄdÄtai SCOM klasei:
NodroÅ”ina rÅ«pnÄ«cas metodes, kas ļauj izveidot klasi no cita komponenta, zinot tikai tÄ nosaukumu (neatklÄjot ievieÅ”anu)
NodroÅ”ina atsauces skaitÄ«Å”anas viedo rÄdÄ«tÄju infrastruktÅ«ru. SCOM klases kalpoÅ”anas laiks nav jÄuzrauga manuÄli
Ä»auj noskaidrot, vai objekts ievieÅ” noteiktu interfeisu, un automÄtiski konvertÄt rÄdÄ«tÄju uz objektu par rÄdÄ«tÄju uz saskarni
Izveidojiet pakalpojuma objektu, kas vienmÄr ir pieejams, izmantojot get_service metodi utt.
PiemÄram, varat aprakstÄ«t klasi JSON lasÄ«Å”anai (piemÄram, JSONStreamReader) komponentÄ json.dll.
Klases un instances var izveidot no citiem komponentiem; tie ir jÄreÄ£istrÄ SCOM maŔīnÄ:
SCOM_CLASS_ENTRY(JSONStreamReader)
Å is makro aprakstÄ«s Ä«paÅ”u statiskÄ ierakstÄ«tÄja klasi, kuras konstruktors tiks izsaukts, kad komponents tiks ielÄdÄts atmiÅÄ.
PÄc tam varat izveidot tÄ instanci citÄ komponentÄ:
Pakalpojumu atbalstam SCOM piedÄvÄ papildu, diezgan sarežģītu infrastruktÅ«ru. TÄs centrÄlais elements ir SCOM procesa jÄdziens, kas kalpo kÄ konteiners pakalpojumu darbinÄÅ”anai (t.i., pilda pakalpojumu meklÄtÄja lomu) un satur arÄ« saistÄ«Å”anu ar lokalizÄtiem resursiem. SCOM process ir saistÄ«ts ar OS pavedienu. Pateicoties tam, lietojumprogrammÄ varat saÅemt Å”Ädus pakalpojumus:
SCOM_Process* process = core::current_process();
if (process)
return get_service<IMyService>(process);
TurklÄt, pÄrslÄdzot loÄ£iskos (SCOM) procesus, kas saistÄ«ti ar pavedienu, jÅ«s varat iegÅ«t no informÄcijas telpas viedokļa praktiski neatkarÄ«gas programmas, kas darbojas vienÄ pavedienÄ. TÄdÄ veidÄ mÅ«su plÄnais klients strÄdÄ ar failu datu bÄzi ā vienÄ OS procesÄ ir divi SCOM procesi, viens saistÄ«ts ar klientu, bet otrs ar serveri. Å Ä« pieeja ļauj mums unificÄt koda rakstÄ«Å”anu, kas darbosies gan lokÄlajÄ failu datu bÄzÄ, gan āÄ«stajÄā klienta-servera versijÄ. Cena par Å”Ädu vienveidÄ«bu ir pieskaitÄma, taÄu prakse rÄda, ka tas ir tÄ vÄrts.
Pamatojoties uz SCOM komponenta modeli, 1C: Enterprise ir ieviesta gan biznesa loģika, gan saskarnes daļa.
LietotÄja interfeiss
Starp citu, par saskarnÄm. MÄs neizmantojam standarta Windows vadÄ«klas; mÅ«su vadÄ«klas ir ieviestas tieÅ”i Windows API. Linux versijai ir izveidots slÄnis, kas darbojas caur wxWidgets bibliotÄku.
VadÄ«bas elementu bibliotÄka nav atkarÄ«ga no citÄm 1C:Enterprise daļÄm, un mÄs to izmantojam vairÄkÄs citÄs mazÄs iekÅ”ÄjÄs utilÄ«tprogrammÄs.
1C:Enterprise izstrÄdes gadu laikÄ vadÄ«klu izskats ir mainÄ«jies, taÄu nopietnas izmaiÅas principos notika tikai vienu reizi, 2009. gadÄ, izlaižot versiju 8.2 un parÄdoties āpÄrvaldÄ«tajÄm formÄmā. Papildus izskata maiÅai ir bÅ«tiski mainÄ«jies arÄ« formas izkÄrtojuma princips - tika noraidÄ«ta elementu pozicionÄÅ”ana pa pikseļiem par labu elementu plÅ«smas izkÄrtojumam. TurklÄt jaunajÄ modelÄ« vadÄ«klas nedarbojas tieÅ”i ar domÄna objektiem, bet gan ar Ä«paÅ”iem DTO (Datu pÄrsÅ«tÄ«Å”anas objekti).
Å Ä«s izmaiÅas ļÄva izveidot 1C:Enterprise tÄ«mekļa klientu, kas atkÄrto JavaScript vadÄ«klu C++ loÄ£iku. MÄs cenÅ”amies saglabÄt funkcionÄlo lÄ«dzvÄrtÄ«bu starp plÄnajiem un tÄ«mekļa klientiem. GadÄ«jumos, kad tas nav iespÄjams, piemÄram, pieejamÄ JavaScript API ierobežojumu dÄļ (piemÄram, iespÄja strÄdÄt ar failiem ir ļoti ierobežota), mÄs bieži ievieÅ”am nepiecieÅ”amo funkcionalitÄti, izmantojot pÄrlÅ«kprogrammas paplaÅ”inÄjumus, kas rakstÄ«ti C++ valodÄ. PaÅ”laik mÄs atbalstÄm Internet Explorer un Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows un Linux) un Safari (MacOS).
TurklÄt pÄrvaldÄ«to veidlapu tehnoloÄ£ija tiek izmantota, lai izveidotu saskarni mobilajÄm lietojumprogrammÄm platformÄ 1C. MobilajÄs ierÄ«cÄs vadÄ«klu renderÄÅ”ana tiek Ä«stenota, izmantojot operÄtÄjsistÄmai raksturÄ«gÄs tehnoloÄ£ijas, bet veidlapas izkÄrtojuma loÄ£ikai un saskarnes reakcijai tiek izmantots tas pats kods kÄ ālielajÄā 1C: Enterprise platformÄ.
1C interfeiss operÄtÄjsistÄmÄ Linux
1C interfeiss mobilajÄ ierÄ«cÄ
1C interfeiss citÄs platformÄs 1C interfeiss operÄtÄjsistÄmÄ Windows OS
Interfeiss 1C - tīmekļa klients
AtvÄrtais avots
Lai gan mÄs neizmantojam standarta bibliotÄkas C++ izstrÄdÄtÄjiem operÄtÄjsistÄmÄ Windows (MFC, vadÄ«klas no WinAPI), mÄs nerakstÄm visus komponentus paÅ”i. Par bibliotÄku jau tika runÄts wxWidget, un mÄs arÄ« izmantojam:
Saraksts turpinÄs.
TurklÄt mÄs izmantojam ļoti modificÄtu versiju Google tests Šø Google izspÄles izstrÄdÄjot vienÄ«bu testus.
BibliotÄkÄm bija nepiecieÅ”ama pielÄgoÅ”ana, lai tÄs bÅ«tu saderÄ«gas ar SCOM komponentu organizÄcijas modeli.
1C izplatÄ«ba padara platformu par lielisku spÄku pÄrbaudi tajÄ izmantotajÄm bibliotÄkÄm. DažÄdi lietotÄji un scenÄriji Ätri atklÄj kļūdas pat visretÄk izmantotajÄs koda zonÄs. MÄs paÅ”i tos labojam un cenÅ”amies atdot bibliotÄkas autoriem. MijiedarbÄ«bas pieredze izrÄdÄs ļoti dažÄda.
IzstrÄdÄtÄji ÄokuroÅ”anÄs Šø libetpan Ätri reaÄ£Ät uz pull-pieprasÄ«jumiem, bet ielÄps, piemÄram, in OpenSSL Mums nekad neizdevÄs to atdot.
SecinÄjums
RakstÄ mÄs pieskÄrÄmies vairÄkiem galvenajiem platformas 1C: Enterprise izstrÄdes aspektiem. Raksta ierobežotajÄ apjomÄ mÄs pieskÄrÄmies tikai dažiem interesantiem, mÅ«suprÄt, aspektiem.
Var atrast vispÄrÄ«gu aprakstu par dažÄdiem platformas mehÄnismiem Å”eit.
KÄdas tÄmas jÅ«s interesÄtu turpmÄkajos rakstos?
KÄ tiek ieviesta 1C mobilÄ platforma?
TÄ«mekļa klienta iekÅ”ÄjÄs struktÅ«ras apraksts?
Vai varbÅ«t jÅ«s interesÄ jaunu izlaidumu funkciju atlases, izstrÄdes un testÄÅ”anas process?