Pallur "1C: Enterprise" - hvað er undir hettunni?

Hæ Habr!
Í þessari grein munum við byrja söguna um hvernig það virkar inni pallur "1C:Enterprise 8" og hvaða tækni er notuð við þróun þess.

Pallur "1C: Enterprise" - hvað er undir hettunni?

Af hverju finnst okkur þetta áhugavert? Í fyrsta lagi vegna þess að 1C:Enterprise 8 vettvangurinn er stórt (meira en 10 milljón línur af kóða) forriti í C++ (viðskiptavinur, netþjónn, osfrv.), JavaScript (vefbiðlari) og, nýlega, Og Java. Stór verkefni geta verið áhugaverð að minnsta kosti vegna umfangs þeirra því atriði sem eru ósýnileg í litlum kóðagrunni koma upp af fullum krafti í slíkum verkefnum. Í öðru lagi er „1C:Enterprise“ afritanleg, „kassa“ vara og það eru mjög fáar greinar um slíka þróun á Habré. Það er líka alltaf áhugavert að vita hvernig lífið er í öðrum liðum og fyrirtækjum.

Svo skulum við byrja. Í þessari grein munum við gefa yfirlit yfir nokkra tækni sem er notuð í pallinum og útlista landslagið, án þess að kafa djúpt í framkvæmdina. Reyndar, fyrir marga aðferðir, myndi nákvæm saga taka sérstaka grein, og fyrir suma, heila bók!
Til að byrja með er það þess virði að ákveða grunnatriðin - hvað 1C:Enterprise vettvangurinn er og hvaða íhlutir hann samanstendur af. Svarið við þessari spurningu er ekki svo einfalt, vegna þess að hugtakið „Platform“ (í stuttu máli munum við kalla það þannig) vísar til leiðar til að þróa viðskiptaforrit, keyrsluumhverfi og stjórnunarverkfæri. Í grófum dráttum má greina eftirfarandi þætti:

  • netþjónaklasa
  • „þunnur“ viðskiptavinur sem getur tengst þjóninum í gegnum http og eigin tvíundarsamskiptareglur
  • viðskiptavinur fyrir að vinna í tvíþættum arkitektúr með gagnagrunni sem staðsettur er á harða diskinum eða netmöppu
  • vefbiðlara
  • stjórnunartól fyrir forritaþjóna
  • þróunarumhverfi (þekkt sem Configurator)
  • keyrsluumhverfi fyrir iOS, Android og Windows Phone (farsímapallur 1C)

Allir þessir hlutar, að undanskildum vefþjóninum, eru skrifaðir í C++. Að auki er nýlega tilkynnt Ný kynslóð stillingar, skrifað á Java.

Innfædd forrit

C++03 er notað til að þróa innfædd forrit. Fyrir Windows er Microsoft Visual C++ 12 (snið sem er samhæft við Windows XP) notað sem þýðandi og fyrir Linux og Android - gcc 4.8, fyrir iOS - clang 5.0. Staðlaða bókasafnið sem notað er er það sama fyrir öll stýrikerfi og þýðendur - STLPort. Þessi lausn dregur úr líkum á STL innleiðingarsértækum villum. Við erum núna að skipuleggja að flytja yfir í STL útfærsluna sem er send með CLang, þar sem STLPort hefur verið hætt og er ósamrýmanlegt C++11 virkt stillingu gcc.
Kóðagrunnur þjónsins er 99% algengur, viðskiptavinarins - 95%. Þar að auki notar jafnvel farsímavettvangurinn sama C++ kóða og sá „stóri“, þó að hlutfall sameiningarinnar þar sé nokkuð lægra.
Eins og flestir C++ notendur, segjumst við ekki nota 100% af getu tungumálsins og bókasöfnum þess. Þannig að við notum nánast ekki Boost og einn af tungumálaeiginleikunum er kraftmikil steypa. Á sama tíma notum við virkan:

  • STL (sérstaklega strengir, ílát og reiknirit)
  • margfaldur arfur, þ.m.t. margfaldur framkvæmdararfur
  • sniðmát
  • undantekningar
  • snjallvísar (sérsniðin útfærsla)

Með því að nota margfalda erfðaviðmót (algjörlega abstrakt flokka) verður íhlutalíkan mögulegt, sem fjallað verður um hér að neðan.

Hluti

Til að tryggja mát er allri virkni skipt í íhluti, sem eru kraftmikil bókasöfn (*.dll fyrir Windows, *.so fyrir Linux). Það eru meira en hundrað og fimmtíu íhlutir alls; hér eru lýsingar á sumum þeirra:

stuðningur
Inniheldur lýsigagnavélina á pallinum

atkv
Hlutir sem forritarar nota til að byggja upp bókhaldsskrár (reikningsyfirlit og bókhaldsskrár)

bsl
Innbyggð tungumálaframkvæmdarvél

nuke
Sérsniðin útfærsla á minnisúthlutunarbúnaði

dbeng8
Skráagagnagrunnsvél. Einföld skráaþjónsgagnagrunnsvél byggð á ISAM, sem einnig inniheldur einfaldan SQL örgjörva

wbase
Inniheldur grunnflokka og aðgerðir til að útfæra Windows notendaviðmótið - gluggaflokkar, GDI aðgangur osfrv.

Að skipta í marga hluti er gagnlegt frá nokkrum sjónarhornum:

  • Aðskilnaður stuðlar að betri hönnun, sérstaklega betri einangrun kóða
  • Úr setti af íhlutum er hægt að setja saman mismunandi afhendingarvalkosti á sveigjanlegan hátt:
    • Til dæmis mun þunnur biðlari uppsetning innihalda wbase, en mun ekki hafa bakenda
    • en á wbase servernum verður það þvert á móti ekki
    • báðir valkostir munu að sjálfsögðu innihalda nuke og bsl

Allir íhlutir sem krafist er fyrir þennan ræsingarvalkost eru hlaðnir þegar forritið byrjar. Þetta er sérstaklega nauðsynlegt til að skrá SCOM flokka, sem verður fjallað um hér að neðan.

SCOM

Fyrir niðurbrot á lægra stigi er SCOM kerfið notað, bókasafn svipað í hugmyndafræði og ATL. Fyrir þá sem hafa ekki unnið með ATL listum við stuttlega helstu möguleika og eiginleika.
Fyrir sérhannaðan SCOM flokk:

  • Býður upp á verksmiðjuaðferðir sem gera þér kleift að búa til flokk úr öðrum íhlut með því að vita aðeins nafn hans (án þess að birta útfærsluna)
  • Býður upp á snjallbendisinnviði sem telur tilvísun. Ekki þarf að fylgjast með líftíma SCOM flokks handvirkt
  • Gerir þér kleift að komast að því hvort hlutur útfærir tiltekið viðmót og umbreytir sjálfkrafa bendi í hlutinn í bendi í viðmótið
  • Búðu til þjónustuhlut sem er alltaf aðgengilegur í gegnum get_service aðferðina o.s.frv.

Til dæmis geturðu lýst flokki til að lesa JSON (til dæmis JSONStreamReader) í json.dll íhlutnum.
Hægt er að búa til flokka og tilvik úr öðrum hlutum; þeir þurfa að vera skráðir í SCOM vélina:

SCOM_CLASS_ENTRY(JSONStreamReader)

Þessi fjölvi mun lýsa sérstökum kyrrstöðuupptökuflokki, sem smiðurinn verður kallaður til þegar íhluturinn er hlaðinn inn í minni.
Eftir þetta geturðu búið til dæmi um það í öðrum íhlut:

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

Til að styðja þjónustu býður SCOM upp á frekar flókna innviði til viðbótar. Aðalatriðið í því er hugmyndin um SCOM ferli, sem þjónar sem ílát fyrir keyrslu þjónustu (þ.e. gegnir hlutverki þjónustustaðsetningar), og inniheldur einnig bindingu við staðbundin auðlind. SCOM ferlið er bundið við OS þráðinn. Þökk sé þessu, inni í forritinu geturðu fengið þjónustu eins og þessa:

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

Þar að auki, með því að skipta um rökræna (SCOM) ferla sem eru tengdir við þráð, geturðu fengið forrit sem eru nánast óháð frá sjónarhóli upplýsingarýmisins, sem keyra innan sama þráðs. Svona vinnur þunni biðlarinn okkar með skráagagnagrunni - inni í einu stýrikerfisferli eru tveir SCOM ferlar, einn tengdur biðlaranum og hinn við netþjóninn. Þessi nálgun gerir okkur kleift að sameina ritun kóða sem mun virka bæði á staðbundnum skráargagnagrunni og í „raunverulegri“ útgáfu viðskiptavinar-miðlara. Verðið fyrir slíka einsleitni er yfir höfuð, en æfingin sýnir að það er þess virði.

Byggt á SCOM íhlutalíkaninu eru bæði viðskiptarökfræði og viðmótshluti 1C: Enterprise innleiddur.

Notendaviðmót

Við the vegur, um tengi. Við notum ekki venjulegar Windows stýringar; stýringar okkar eru útfærðar beint á Windows API. Fyrir Linux útgáfuna hefur verið búið til lag sem virkar í gegnum wxWidgets bókasafnið.
Stýringarsafnið er ekki háð öðrum hlutum 1C:Enterprise og er notað af okkur í nokkrum öðrum litlum innri tólum.

Í áranna rás 1C:Enterprise hefur útlit stjórna breyst, en alvarleg breyting á meginreglum átti sér stað aðeins einu sinni, árið 2009, með útgáfu útgáfu 8.2 og tilkomu „stýrðra eyðublaða“. Auk þess að breyta útlitinu hefur meginreglan um formútlit breyst í grundvallaratriðum - það var höfnun á pixla-fyrir-pixla staðsetningu á þáttum í þágu flæðisskipulags þátta. Að auki, í nýju líkaninu, virka stýringar ekki beint með lénshlutum, heldur með sérstökum DTO (Gagnaflutningshlutir).
Þessar breytingar gerðu það mögulegt að búa til 1C:Enterprise vefbiðlara sem endurtekur C++ rökfræði JavaScript stýringa. Við reynum að viðhalda hagnýtu jafngildi milli þunnra viðskiptavina og vefbiðlara. Í þeim tilvikum þar sem þetta er ekki mögulegt, til dæmis vegna takmarkana á JavaScript API sem er tiltækt (til dæmis, getan til að vinna með skrár er mjög takmörkuð), innleiðum við oft nauðsynlega virkni með því að nota vafraviðbætur skrifaðar í C++. Við styðjum eins og er Internet Explorer og Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows og Linux) og Safari (MacOS).

Að auki er stýrð formtækni notuð til að búa til viðmót fyrir farsímaforrit á 1C pallinum. Í farsímum er birting stjórna útfærð með því að nota tækni sem er innfædd í stýrikerfinu, en fyrir útlitsrökfræði formsins og viðmótssvörun er sami kóði notaður og í „stóra“ 1C:Enterprise pallinum.

Pallur "1C: Enterprise" - hvað er undir hettunni?
1C tengi á Linux OS

Pallur "1C: Enterprise" - hvað er undir hettunni?
1C tengi á farsíma

1C tengi á öðrum kerfum Pallur "1C: Enterprise" - hvað er undir hettunni?
1C tengi á Windows OS

Pallur "1C: Enterprise" - hvað er undir hettunni?
Tengi 1C - vefbiðlari

opinn uppspretta

Þó að við notum ekki stöðluð bókasöfn fyrir C++ forritara undir Windows (MFC, stýringar frá WinAPI), skrifum við ekki alla hluti sjálf. Þegar hefur verið minnst á bókasafnið wxWidgets, og við notum líka:

  • Curl til að vinna með HTTP og FTP.
  • OpenSSL til að vinna með dulmál og koma á TLS tengingum
  • libxml2 og libxslt fyrir XML þáttun
  • libertpan til að vinna með póstsamskiptareglur (POP3, SMTP, IMAP)
  • herma eftir til að flokka tölvupóstskeyti
  • sqllite til að geyma notendaskrár
  • ICU til alþjóðavæðingar

Listinn heldur áfram.
Að auki notum við mjög breytta útgáfu Google próf и Google Mock við þróun einingaprófa.
Söfnin kröfðust aðlögunar til að vera samhæft við skipulagslíkan SCOM íhluta.
Algengi 1C gerir pallinn að frábæru styrkleikaprófi fyrir bókasöfnin sem notuð eru í honum. Margs konar notendur og aðstæður sýna fljótt villur á jafnvel sjaldan notuðum kóðasvæðum. Við leiðréttum þær sjálf og reynum að skila þeim til höfunda bókasafnsins. Upplifunin af samskiptum reynist mjög mismunandi.
Nýskráning Curl и libertpan bregðast fljótt við pull-beiðnum, en plásturinn, til dæmis, í OpenSSL Við náðum aldrei að gefa það til baka.

Ályktun

Í greininni komum við inn á nokkra meginþætti þróunar 1C: Enterprise vettvangsins. Í takmörkuðu umfangi greinarinnar komum við aðeins inn á nokkra áhugaverða þætti að okkar mati.
Almenn lýsing á hinum ýmsu kerfisbúnaði er að finna hér.
Hvaða efni myndi vekja áhuga þinn í næstu greinum?

Hvernig er 1C farsímavettvangurinn útfærður?
Lýsing á innri uppbyggingu vefþjónsins?
Eða kannski hefur þú áhuga á því ferli að velja eiginleika fyrir nýjar útgáfur, þróa og prófa?

Skrifaðu í athugasemdir!

Heimild: www.habr.com

Bæta við athugasemd