Plataforma "1C: Enterprise" - zer dago kanpaiaren azpian?

Aupa Habr!
Artikulu honetan barnean nola funtzionatzen duen istorioari ekingo diogu "1C:Enterprise 8" plataforma eta bere garapenean zer teknologia erabiltzen diren.

Plataforma "1C: Enterprise" - zer dago kanpaiaren azpian?

Zergatik uste dugu hau interesgarria dela? Lehenik eta behin, 1C:Enterprise 8 plataforma C++ (bezeroa, zerbitzaria, etab.), JavaScript (web bezeroa) eta, duela gutxi, C++ aplikazio handi bat delako (10 milioi kode-lerro baino gehiago). Java. Proiektu handiak interesgarriak izan daitezke haien eskalagatik behintzat, kode-oinarri txiki batean ikusezinak diren gaiak indar osoz sortzen direlako horrelako proiektuetan. Bigarrenik, "1C:Enterprise" produktu erreplikagarria da, "kutxadun" eta oso artikulu gutxi daude HabrΓ©-n halako garapenei buruz. Gainera, beti da interesgarria beste talde eta enpresetan bizitza nola dagoen jakitea.

Beraz, has gaitezen. Artikulu honetan plataforman erabiltzen diren teknologia batzuen ikuspegi orokorra emango dugu eta paisaia eskematuko dugu, ezarpenean sakondu gabe. Izan ere, mekanismo askorentzat, istorio zehatz batek aparteko artikulu bat beharko luke, eta batzuentzat, liburu oso bat!
Hasteko, merezi du oinarrizko gauzak erabakitzea: zer den 1C:Enterprise plataforma eta zer osagaiz osatuta dagoen. Galdera honen erantzuna ez da hain erraza, zeren "Plataforma" terminoak (laburtasunerako, horrela deituko diogu) negozio-aplikazioak, exekuzio-ingurunea eta administrazio-tresnak garatzeko bitarteko bati egiten dio erreferentzia. Osagai hauek gutxi gorabehera bereiz daitezke:

  • zerbitzari-kluster
  • http eta bere protokolo bitar bidez zerbitzarira konektatzeko gai den bezero "mehea".
  • disko gogorrean edo sareko karpetan kokatutako datu-base batekin bi mailatako arkitekturan lan egiteko bezeroa
  • web bezeroa
  • aplikazio-zerbitzaria administratzeko tresnak
  • garapen-ingurunea (Konfiguratzailea izenez ezagutzen dena)
  • exekuzio-ingurunea iOS, Android eta Windows Phonerako (plataforma mugikorra 1C)

Zati hauek guztiak, web bezeroa izan ezik, C++-n idatzita daude. Gainera, duela gutxi iragarritakoa dago Belaunaldi berriko konfiguratzailea, Javan idatzia.

Aplikazio natiboak

C++03 jatorrizko aplikazioak garatzeko erabiltzen da. Windows-erako, Microsoft Visual C++ 12 (Windows XP-rekin bateragarria den profila) konpilatzaile gisa erabiltzen da, eta Linux eta Android - gcc 4.8, iOS - clang 5.0. Erabilitako liburutegi estandarra sistema eragile eta konpilatzaile guztientzat berdina da - STLPort. Soluzio honek STL inplementazio espezifikoen erroreak izateko probabilitatea murrizten du. Une honetan CLang-ekin bidaltzen den STL inplementaziora migratzeko asmoa dugu, STLPort eten egin baita eta bateraezina baita gcc-ren C++11 gaituta moduarekin.
Zerbitzariaren kodearen oinarria % 99 ohikoa da, bezeroarena - % 95. Gainera, mugikorreko plataformak ere C++ kode bera erabiltzen du β€œhandien” kode bera, nahiz eta bertan bateratzearen portzentajea zertxobait txikiagoa den.
C++ erabiltzaile gehienek bezala, ez dugu aldarrikatzen hizkuntzaren eta bere liburutegien gaitasunen %100a erabiltzea. Beraz, ia ez dugu Boost erabiltzen, eta hizkuntzaren ezaugarrietako bat motako casting dinamikoa da. Aldi berean, aktiboki erabiltzen dugu:

  • STL (bereziki kateak, edukiontziak eta algoritmoak)
  • herentzia anitza, barne. ezarpen anitzeko herentzia
  • txantiloiak
  • salbuespenak
  • Erakusle adimendunak (inplementazio pertsonalizatua)

Interfazeen herentzia anitz erabiliz (klase guztiz abstraktuak), osagaien eredu bat posible bihurtzen da, jarraian aztertuko dena.

Osagaiak

Modulartasuna bermatzeko, funtzionalitate guztiak osagaietan banatzen dira, liburutegi dinamikoak (*.dll Windowsentzat, *.so Linuxentzat). Guztira ehun eta berrogeita hamar osagai baino gehiago daude; hona hemen horietako batzuen deskribapenak:

backend
Plataformaren metadatuen motorra dauka

aitortza
Aplikazioen garatzaileek kontabilitate-erregistroak eraikitzeko erabiltzen dituzten objektuak (kontu-planak eta kontabilitate-erregistroak)

bsl
Txertatutako hizkuntza exekutatzeko motorra

nuke
Memoria-esleitzailearen ezarpen pertsonalizatua

dbeng8
Fitxategien datu-basearen motorra. ISAM-en oinarritutako fitxategi-zerbitzariaren datu base-motor sinplea, SQL prozesadore soil bat ere barne hartzen duena

wbase
Windows erabiltzaile-interfazea ezartzeko oinarrizko klaseak eta funtzioak ditu: leiho klaseak, GDI sarbidea, etab.

Hainbat osagaitan banatzea erabilgarria da hainbat ikuspuntutatik:

  • Bereizketak diseinu hobea sustatzen du, bereziki kodearen isolamendu hobea
  • Osagai multzo batetik malgutasunez munta ditzakezu entrega-aukera desberdinak:
    • Adibidez, bezero meheen instalazio batek wbase edukiko du, baina ez du backend-a izango
    • baina wbase zerbitzarian, aitzitik, ez da izango
    • bi aukerak, noski, nuke eta bsl edukiko dituzte

Abian jartzeko aukera honetarako beharrezkoak diren osagai guztiak programa abiaraztean kargatzen dira. Hau, bereziki, beharrezkoa da SCOM klaseak erregistratzeko, eta hauek behean aztertuko dira.

SCOM

Maila baxuagoko deskonposiziorako, SCOM sistema erabiltzen da, ATLren ideologian antzeko liburutegia. ATL-rekin lan egin ez dutenentzat, labur-labur zerrendatzen ditugu gaitasun eta ezaugarri nagusiak.
Bereziki diseinatutako SCOM klase baterako:

  • Fabrika-metodoak eskaintzen ditu, beste osagai batetik klase bat bere izena bakarrik jakinda (inplementazioa agerian utzi gabe) sortzeko aukera ematen dutenak.
  • Erreferentziak zenbatzeko erakusle adimendunaren azpiegitura bat eskaintzen du. SCOM klasearen bizitza ez da eskuz kontrolatu behar
  • Objektu batek interfaze zehatz bat inplementatzen duen jakiteko eta objekturako erakuslea automatikoki interfazeko erakusle bihurtzeko aukera ematen du.
  • Sortu get_service metodoaren bidez beti eskuragarri dagoen zerbitzu-objektu bat, etab.

Adibidez, JSON irakurtzeko klase bat deskriba dezakezu (adibidez, JSONStreamReader) json.dll osagaian.
Klaseak eta instantziak beste osagai batzuetatik sor daitezke; SCOM makinan erregistratu behar dira:

SCOM_CLASS_ENTRY(JSONStreamReader)

Makro honek grabagailu estatikoko klase berezi bat deskribatuko du, zeinaren eraikitzaileari deituko zaio osagaia memorian kargatzen denean.
Horren ondoren, horren instantzia bat sor dezakezu beste osagai batean:

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

Zerbitzuak laguntzeko, SCOMek azpiegitura osagarri eta konplexu samarra eskaintzen du. Funtsezkoa da SCOM prozesu baten kontzeptua, zerbitzuak exekutatzeko edukiontzi gisa balio duena (hots, Service Locator rola betetzen du), eta baliabide lokalizatuekin lotura bat ere badu. SCOM prozesua OS hariari lotuta dago. Horri esker, aplikazioaren barruan honelako zerbitzuak jaso ditzakezu:

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

Gainera, hari bati lotutako prozesu logikoak (SCOM) aldatuz gero, informazio-espazioaren ikuspuntutik ia independenteak diren aplikazioak lor ditzakezu, hari berean exekutatzen direnak. Honela funtzionatzen du gure bezero meheak fitxategien datu-base batekin - OS prozesu baten barruan bi SCOM prozesu daude, bat bezeroarekin lotutakoa eta bigarrena zerbitzariarekin. Ikuspegi honi esker, fitxategien datu-base lokalean zein bezero-zerbitzariaren bertsio "benetako" funtzionatuko duen kodearen idazketa bateratu dezakegu. Uniformetasun horren prezioa gainbehera da, baina praktikak erakusten du merezi duela.

SCOM osagaien ereduan oinarrituta, 1C: Enterprise-ren negozio-logika eta interfazearen zatia inplementatzen dira.

Erabiltzaile interfazea

Bide batez, interfazeei buruz. Ez ditugu Windows kontrol estandarrak erabiltzen; gure kontrolak Windows APIan zuzenean ezartzen dira. Linux bertsiorako, wxWidgets liburutegiaren bidez funtzionatzen duen geruza bat egin da.
Kontrolen liburutegia ez dago 1C:Enterprise-ren beste atal batzuen menpe eta barneko beste hainbat utilitate txikitan erabiltzen dugu.

1C:Enterpriseren garapen urteetan zehar, kontrolen itxura aldatu egin da, baina printzipioen aldaketa larria behin bakarrik gertatu zen, 2009an, 8.2 bertsioa kaleratu eta "kudeatutako inprimaki"en agerpenarekin. Itxura aldatzeaz gain, inprimakien diseinuaren printzipioa funtsean aldatu da - elementuen pixelez pixel kokatzea baztertu zen elementuen fluxu-diseinuaren alde. Gainera, eredu berrian, kontrolak ez dute zuzenean domeinuko objektuekin funtzionatzen, DTO bereziekin baizik (Datuak transferitzeko objektuak).
Aldaketa hauek JavaScript kontrolen C++ logika errepikatzen duen 1C:Enterprise web-bezero bat sortzea posible egin zuten. Bezero meheen eta web bezeroen arteko baliokidetasun funtzionala mantentzen saiatzen gara. Hori posible ez den kasuetan, adibidez eskuragarri dagoen JavaScript APIaren mugengatik (adibidez, fitxategiekin lan egiteko gaitasuna oso mugatua da), askotan C++-n idatzitako arakatzailearen luzapenak erabiliz inplementatzen dugu beharrezko funtzionaltasuna. Gaur egun, Internet Explorer eta Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows eta Linux) eta Safari (MacOS) onartzen ditugu.

Gainera, kudeatutako inprimakien teknologia erabiltzen da 1C plataforman aplikazio mugikorretarako interfaze bat sortzeko. Gailu mugikorretan, kontrolak errendatzea sistema eragilearen berezko teknologiak erabiliz inplementatzen da, baina inprimaki-diseinuaren logikarako eta interfazearen erantzunerako, 1C:Enterprise plataforma "handian" bezalako kode bera erabiltzen da.

Plataforma "1C: Enterprise" - zer dago kanpaiaren azpian?
1C interfazea Linux sistema eragilean

Plataforma "1C: Enterprise" - zer dago kanpaiaren azpian?
1C interfazea gailu mugikor batean

1C interfazea beste plataformetan Plataforma "1C: Enterprise" - zer dago kanpaiaren azpian?
1C interfazea Windows OS-n

Plataforma "1C: Enterprise" - zer dago kanpaiaren azpian?
1C interfazea - ​​web bezeroa

Open source

Windows-en C++ garatzaileentzako liburutegi estandarrak erabiltzen ez baditugu ere (MFC, WinAPIko kontrolak), ez ditugu osagai guztiak guk geuk idazten. Liburutegia aipatu da jada wxWidgets, eta hau ere erabiltzen dugu:

  • cURL HTTP eta FTPrekin lan egiteko.
  • OpenSSL kriptografiarekin lan egiteko eta TLS konexioak ezartzeko
  • libxml2 eta libxslt XML analizatzeko
  • libetpan Posta-protokoloekin lan egiteko (POP3, SMTP, IMAP)
  • mimetikoa mezu elektronikoak analizatzeko
  • sqllite erabiltzaileen erregistroak gordetzeko
  • ZIU nazioartekotzeko

Zerrenda aurrera doa.
Gainera, oso aldatutako bertsioa erabiltzen dugu Google Test ΠΈ Google Mock unitate-probak garatzerakoan.
Liburutegiek egokitzapena behar zuten SCOM osagaien antolaketa ereduarekin bateragarri izateko.
1C-ren prebalentziak plataformak indar proba bikaina egiten du bertan erabiltzen diren liburutegietarako. Erabiltzaile eta agertoki ezberdinek akatsak azkar erakusten dituzte kode gutxien erabiltzen diren eremuetan ere. Guk geuk zuzentzen ditugu eta liburutegiko egileei itzultzen saiatzen gara. Elkarreraginaren esperientzia oso ezberdina da.
Garatzaileak cURL ΠΈ libetpan erantzun bizkor tira-eskaerei, baina adabakia, adibidez, sartu OpenSSL Ez genuen inoiz itzultzea lortu.

Ondorioa

Artikuluan 1C: Enterprise plataformaren garapenaren hainbat alderdi nagusi ukitu ditugu. Artikuluaren esparru mugatuan, gure ustez, alderdi interesgarri batzuk bakarrik ukitu ditugu.
Plataformaren hainbat mekanismoren deskribapen orokorra aurki daiteke Hemen.
Zein gai izango litzaizuke interesgarriak hurrengo artikuluetan?

Nola ezartzen da 1C plataforma mugikorra?
Web bezeroaren barne egituraren deskribapena?
Edo agian bertsio berrietarako funtzioak hautatzeko, garatzeko eta probatzeko prozesua interesatzen zaizu?

Idatzi iruzkinetan!

Iturria: www.habr.com

Gehitu iruzkin berria