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.
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
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)
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:
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.
1C interfazea Linux sistema eragilean
1C interfazea gailu mugikor batean
1C interfazea beste plataformetan 1C interfazea Windows OS-n
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:
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?