Platform nga "1C: Enterprise" - unsa ang naa sa ilawom sa hood?

Hoy Habr!
Niini nga artikulo magsugod kami sa istorya kung giunsa kini molihok sa sulod plataporma "1C: Enterprise 8" ug unsa nga mga teknolohiya ang gigamit sa pagpalambo niini.

Platform nga "1C: Enterprise" - unsa ang naa sa ilawom sa hood?

Ngano sa atong hunahuna nga kini makapaikag? Una, tungod kay ang 1C: Enterprise 8 nga plataporma usa ka dako (labaw pa sa 10 milyon nga linya sa code) nga aplikasyon sa C++ (kliyente, server, ug uban pa), JavaScript (kliyente sa web), ug, bag-o lang, Ug Java. Ang dagkong mga proyekto mahimong makapaikag sa labing menos tungod sa ilang gidak-on, tungod kay ang mga isyu nga dili makita sa usa ka gamay nga code base mitungha sa bug-os nga puwersa sa maong mga proyekto. Ikaduha, ang "1C:Enterprise" usa ka repliable, "kahon" nga produkto, ug gamay ra ang mga artikulo bahin sa ingon nga mga kalamboan sa HabrΓ©. Kanunay usab nga makapaikag nga mahibal-an kung unsa ang kinabuhi sa ubang mga team ug kompanya.

So sugdan na nato. Sa kini nga artikulo maghatag kami usa ka kinatibuk-ang panan-aw sa pipila nga mga teknolohiya nga gigamit sa plataporma ug gilaraw ang talan-awon, nga wala’y lawom nga pag-diving sa pagpatuman. Sa tinuud, alang sa daghang mga mekanismo, ang usa ka detalyado nga istorya nanginahanglan usa ka lahi nga artikulo, ug alang sa pipila, usa ka tibuuk nga libro!
Sa pagsugod, angayan nga magdesisyon sa sukaranang mga butang - kung unsa ang 1C: Enterprise nga plataporma ug kung unsang mga sangkap ang gilangkuban niini. Ang tubag niini nga pangutana dili kaayo yano, tungod kay ang termino nga "Platform" (alang sa mubo, tawgon nato kini nga paagi) nagtumong sa usa ka paagi alang sa pagpalambo sa mga aplikasyon sa negosyo, usa ka runtime nga palibot, ug mga himan sa pagdumala. Ang mosunud nga mga sangkap mahimo nga halos mailhan:

  • cluster sa server
  • "nipis" nga kliyente nga makahimo sa pagkonektar sa server pinaagi sa http ug sa kaugalingon nga binary protocol
  • kliyente alang sa pagtrabaho sa usa ka two-tier nga arkitektura nga adunay database nga nahimutang sa usa ka hard drive o folder sa network
  • kliyente sa web
  • mga himan sa pagdumala sa server sa aplikasyon
  • development environment (nailhan nga Configurator)
  • runtime environment para sa iOS, Android ug Windows Phone (mobile platform 1C)

Kining tanan nga mga bahin, gawas sa web client, gisulat sa C++. Dugang pa, adunay bag-o nga gipahibalo Bag-ong henerasyon nga configurator, gisulat sa Java.

Lumad nga mga app

Ang C++03 gigamit sa paghimo og lumad nga mga aplikasyon. Para sa Windows, ang Microsoft Visual C++ 12 (usa ka profile nga compatible sa Windows XP) gigamit isip compiler, ug para sa Linux ug Android - gcc 4.8, para sa iOS - clang 5.0. Ang standard nga librarya nga gigamit parehas alang sa tanang operating system ug compiler - STLPort. Kini nga solusyon makapamenos sa kalagmitan sa STL nga espesipiko sa pagpatuman sa mga sayop. Nagplano kami karon nga molalin ngadto sa pagpatuman sa STL nga gipadala uban sa CLang, tungod kay ang STLPort gihunong na ug dili uyon sa Gcc's C++11 enabled mode.
Ang base sa code sa server kay 99% komon, ang kliyente - 95%. Dugang pa, bisan ang mobile platform naggamit sa parehas nga C ++ code nga "dako", bisan kung ang porsyento sa paghiusa didto medyo ubos.
Sama sa kadaghanan sa mga tiggamit sa C++, wala kami nag-angkon nga naggamit sa 100% sa mga kapabilidad sa pinulongan ug sa mga librarya niini. Mao nga, halos wala kami mogamit sa Boost, ug usa sa mga bahin sa lengguwahe mao ang dinamikong tipo sa paghulma. Sa parehas nga oras, aktibo namon nga gigamit ang:

  • STL (partikular nga mga string, sudlanan ug algorithm)
  • daghang kabilin, incl. multiple implementation inheritance
  • mga template
  • eksepsiyon
  • smart pointers (custom nga pagpatuman)

Pinaagi sa paggamit sa daghang kabilin sa mga interface (hingpit nga abstract nga mga klase), ang usa ka component nga modelo nahimong posible, nga pagahisgutan sa ubos.

Mga Bahin

Aron maseguro ang modularity, ang tanang functionality gibahin ngadto sa mga component, nga mga dinamikong library (*.dll for Windows, *.so for Linux). Adunay sobra sa usa ka gatos ug kalim-an nga mga sangkap sa kinatibuk-an; ania ang mga paghulagway sa pipila niini:

backend
Naglangkob sa platform metadata engine

accnt
Mga butang nga gigamit sa mga developer sa aplikasyon sa paghimo sa mga rekord sa accounting (mga tsart sa mga account ug mga rehistro sa accounting)

bsl
Naka-embed nga makina sa pagpatuman sa pinulongan

nuke
Custom nga pagpatuman sa memory allocator

dbeng8
File database engine. Usa ka yano nga file server database engine nga gibase sa ISAM, nga naglakip usab sa usa ka yano nga SQL processor

wbase
Naglangkob sa base nga mga klase ug mga gimbuhaton alang sa pagpatuman sa Windows user interface - mga klase sa bintana, GDI access, ug uban pa.

Ang pagbahin sa daghang mga sangkap mapuslanon gikan sa daghang mga punto sa panglantaw:

  • Ang panagbulag nagpasiugda sa mas maayo nga disenyo, ilabi na sa mas maayo nga code isolation
  • Gikan sa usa ka hugpong sa mga sangkap mahimo nimo nga dali nga ma-assemble ang lainlaing mga kapilian sa pagpadala:
    • Pananglitan, ang usa ka manipis nga pag-instalar sa kliyente adunay sulud nga wbase, apan wala’y backend
    • apan sa wbase server, sa sukwahi, kini dili
    • Ang duha nga mga kapilian siyempre adunay sulud nga nuke ug bsl

Ang tanan nga mga sangkap nga gikinahanglan alang sa kini nga kapilian sa paglansad gikarga kung magsugod ang programa. Kini, sa partikular, gikinahanglan alang sa pagparehistro sa mga klase sa SCOM, nga pagahisgutan sa ubos.

SCOM

Alang sa pagkadunot sa ubos nga lebel, gigamit ang sistema sa SCOM, usa ka librarya nga susama sa ideolohiya sa ATL. Alang niadtong wala pa nagtrabaho uban sa ATL, among gilista sa makadiyot ang mga nag-unang kapabilidad ug mga bahin.
Alang sa espesyal nga gidisenyo nga klase sa SCOM:

  • Naghatag mga pamaagi sa pabrika nga nagtugot kanimo sa paghimo usa ka klase gikan sa lain nga sangkap nga nahibal-an ra ang ngalan niini (nga wala gipadayag ang pagpatuman)
  • Naghatag ug reference-counting smart pointer infrastructure. Ang tibuok kinabuhi sa klase sa SCOM dili kinahanglan nga manu-manong pagmonitor
  • Gitugotan ka nga mahibal-an kung ang usa ka butang nagpatuman sa usa ka piho nga interface ug awtomatiko nga i-convert ang usa ka pointer sa butang ngadto sa usa ka pointer sa interface
  • Paghimo usa ka butang sa serbisyo nga kanunay ma-access pinaagi sa get_service nga pamaagi, ug uban pa.

Pananglitan, mahimo nimong ihulagway ang usa ka klase alang sa pagbasa sa JSON (pananglitan, JSONStreamReader) sa sangkap nga json.dll.
Ang mga klase ug mga instance mahimong mabuhat gikan sa ubang mga sangkap; kinahanglan sila nga marehistro sa makina sa SCOM:

SCOM_CLASS_ENTRY(JSONStreamReader)

Kini nga macro maghubit sa usa ka espesyal nga static recorder nga klase, ang tigtukod nga tawgon kung ang sangkap gikarga sa memorya.
Human niini, makahimo ka og usa ka pananglitan niini sa laing bahin:

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

Aron suportahan ang mga serbisyo, ang SCOM nagtanyag usa ka dugang, labi ka komplikado nga imprastraktura. Ang sentro niini mao ang konsepto sa usa ka proseso sa SCOM, nga nagsilbing usa ka sudlanan alang sa pagpadagan sa mga serbisyo (pananglitan, nagdula sa papel sa Service Locator), ug adunay usab usa ka pagbugkos sa mga lokal nga kapanguhaan. Ang proseso sa SCOM nahigot sa OS thread. Salamat niini, sa sulod sa aplikasyon makadawat ka mga serbisyo nga sama niini:

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

Dugang pa, pinaagi sa pagbalhin sa lohikal (SCOM) nga mga proseso nga nahigot sa usa ka hilo, mahimo nimong makuha ang mga aplikasyon nga halos independente gikan sa punto sa panglantaw sa wanang sa impormasyon, nga nagdagan sulod sa samang hilo. Ingon niini ang pagtrabaho sa among manipis nga kliyente sa usa ka database sa file - sa sulod sa usa ka proseso sa OS adunay duha ka proseso sa SCOM, usa nga nakig-uban sa kliyente, ug ang ikaduha sa server. Kini nga pamaagi nagtugot kanamo sa paghiusa sa pagsulat sa code nga magamit sa lokal nga database sa file ug sa "tinuod" nga bersyon sa kliyente-server. Ang bili alang sa maong pagkaparehas mao ang overhead, apan ang praktis nagpakita nga kini takos niini.

Base sa SCOM component model, ang business logic ug ang interface nga bahin sa 1C: Enterprise gipatuman.

Ang interface sa user

Pinaagi sa dalan, mahitungod sa mga interface. Wala mi mogamit ug standard nga mga kontrol sa Windows; ang among mga kontrol direktang gipatuman sa Windows API. Alang sa bersyon sa Linux, usa ka layer ang gihimo nga magamit pinaagi sa librarya sa wxWidgets.
Ang librarya sa mga kontrol wala magdepende sa ubang mga bahin sa 1C:Enterprise ug gigamit namo sa daghang uban pang gagmay nga internal nga mga utilities.

Sulod sa mga katuigan sa pag-uswag sa 1C: Enterprise, ang dagway sa mga kontrol nausab, apan ang usa ka seryoso nga pagbag-o sa mga prinsipyo nahitabo kausa lamang, sa 2009, uban sa pagpagawas sa bersyon 8.2 ug sa pag-abut sa "managed forms". Dugang sa pagbag-o sa hitsura, ang prinsipyo sa porma nga layout sa sukaranan nausab - adunay usa ka pagsalikway sa pixel-by-pixel positioning sa mga elemento pabor sa flow-layout sa mga elemento. Dugang pa, sa bag-ong modelo, ang mga kontrol dili direktang molihok sa mga butang sa domain, apan adunay mga espesyal nga DTO (Mga Butang sa Pagbalhin sa Data).
Kini nga mga pagbag-o nagpaposible sa paghimo sa usa ka 1C: Enterprise web client nga nagsundog sa C++ nga lohika sa mga kontrol sa JavaScript. Gisulayan namon nga mapadayon ang pagkaparehas sa pag-andar tali sa nipis ug mga kliyente sa web. Sa mga kaso diin kini dili mahimo, pananglitan tungod sa mga limitasyon sa JavaScript API nga anaa (pananglitan, ang abilidad sa pagtrabaho uban sa mga file limitado kaayo), kanunay namong ipatuman ang gikinahanglan nga gamit gamit ang mga extension sa browser nga gisulat sa C++. Gisuportahan namon karon ang Internet Explorer ug Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows ug Linux) ug Safari (MacOS).

Dugang pa, ang teknolohiya sa pagdumala sa mga porma gigamit sa paghimo og interface alang sa mga mobile application sa 1C nga plataporma. Sa mga mobile device, ang paghubad sa mga kontrol gipatuman gamit ang mga teknolohiya nga lumad sa operating system, apan alang sa porma nga layout logic ug interface nga tubag, ang sama nga code gigamit sama sa "dako" nga 1C:Enterprise platform.

Platform nga "1C: Enterprise" - unsa ang naa sa ilawom sa hood?
1C interface sa Linux OS

Platform nga "1C: Enterprise" - unsa ang naa sa ilawom sa hood?
1C interface sa usa ka mobile device

1C interface sa ubang mga platform Platform nga "1C: Enterprise" - unsa ang naa sa ilawom sa hood?
1C interface sa Windows OS

Platform nga "1C: Enterprise" - unsa ang naa sa ilawom sa hood?
Interface 1C - kliyente sa web

Open tinubdan

Bisan tuod wala kami mogamit ug standard nga mga librarya alang sa C++ developers ubos sa Windows (MFC, mga kontrol gikan sa WinAPI), wala namo isulat ang tanang sangkap sa among kaugalingon. Ang librarya nahisgotan na wxWidgets, ug gigamit usab namo ang:

  • curl alang sa pagtrabaho uban sa HTTP ug FTP.
  • OpenSSL alang sa pagtrabaho sa cryptography ug pag-establisar sa mga koneksyon sa TLS
  • libxml2 ug libxslt alang sa XML parsing
  • libetpan alang sa pagtrabaho sa mga mail protocol (POP3, SMTP, IMAP)
  • nagsundog sa pag-parse sa mga mensahe sa email
  • sqllite alang sa pagtipig sa mga log sa gumagamit
  • ICU alang sa internasyonalisasyon

Ang listahan nagpadayon.
Dugang pa, naggamit kami usa ka giusab nga bersyon Pagsulay sa Google ΠΈ Google Mock kung nag-develop sa mga pagsulay sa yunit.
Ang mga librarya nanginahanglan pagpahiangay aron mahiuyon sa modelo sa organisasyon sa sangkap sa SCOM.
Ang pagkaylap sa 1C naghimo sa plataporma nga usa ka maayo kaayo nga pagsulay sa kusog alang sa mga librarya nga gigamit niini. Ang lainlaing mga tiggamit ug mga senaryo dali nga nagpadayag sa mga sayup bisan sa labing talagsa nga gigamit nga mga lugar sa code. Gitul-id namo kini sa among kaugalingon ug naningkamot nga ibalik kini sa mga tigsulat sa librarya. Ang kasinatian sa interaksyon nahimo nga lahi kaayo.
Mga Developer curl ΠΈ libetpan tubag dayon sa pagbitad-hangyo, apan ang patch, pananglitan, sa OpenSSL Wala gyud mi makauli niini.

konklusyon

Sa artikulo natandog namon ang daghang mga nag-unang aspeto sa pag-uswag sa 1C: Enterprise nga plataporma. Sa limitado nga kasangkaran sa artikulo, among gipunting ang pipila lamang nga makapaikag, sa among opinyon, mga aspeto.
Makita ang usa ka kinatibuk-ang paghulagway sa lainlaing mga mekanismo sa plataporma dinhi.
Unsang mga topiko ang makapainteres kanimo sa umaabot nga mga artikulo?

Giunsa gipatuman ang 1C mobile platform?
Deskripsyon sa internal nga istruktura sa web client?
O tingali interesado ka sa proseso sa pagpili sa mga bahin alang sa mga bag-ong pagpagawas, pagpalambo ug pagsulay?

Isulat sa mga komento!

Source: www.habr.com

Idugang sa usa ka comment