Llwyfan "1C: Menter" - beth sydd o dan y cwfl?

Hei Habr!
Yn yr erthygl hon byddwn yn dechrau'r stori am sut mae'n gweithio y tu mewn platfform "1C:Menter 8" a pha dechnolegau a ddefnyddir yn ei ddatblygiad.

Llwyfan "1C: Menter" - beth sydd o dan y cwfl?

Pam rydyn ni'n meddwl bod hyn yn ddiddorol? Yn gyntaf, oherwydd bod platfform 1C:Enterprise 8 yn gymhwysiad mawr (mwy na 10 miliwn o linellau o god) yn C ++ (cleient, gweinydd, ac ati), JavaScript (cleient gwe), ac, yn fwy diweddar, Ac Java. Gall prosiectau mawr fod yn ddiddorol o leiaf oherwydd eu maint, oherwydd mae materion sy'n anweledig mewn sylfaen cod bach yn codi mewn grym llawn mewn prosiectau o'r fath. Yn ail, mae “1C:Menter” yn gynnyrch “mewn bocsys” y gellir ei ailadrodd, ac ychydig iawn o erthyglau am ddatblygiadau o'r fath sydd ar Habré. Mae hefyd bob amser yn ddiddorol gwybod sut mae bywyd mewn timau a chwmnïau eraill.

Felly gadewch i ni ddechrau. Yn yr erthygl hon byddwn yn rhoi trosolwg o rai o'r technolegau a ddefnyddir yn y platfform ac yn amlinellu'r dirwedd, heb blymio'n ddwfn i'r gweithredu. Yn wir, ar gyfer llawer o fecanweithiau, byddai stori fanwl yn gofyn am erthygl ar wahân, ac i rai, llyfr cyfan!
I ddechrau, mae'n werth penderfynu ar y pethau sylfaenol - beth yw'r platfform 1C:Menter a pha gydrannau sydd ynddo. Nid yw'r ateb i'r cwestiwn hwn mor syml, oherwydd mae'r term “Platfform” (am grynodeb, byddwn yn ei alw felly) yn cyfeirio at fodd ar gyfer datblygu cymwysiadau busnes, amgylchedd amser rhedeg, ac offer gweinyddol. Gellir gwahaniaethu'r cydrannau canlynol yn fras:

  • clwstwr gweinydd
  • cleient “tenau” sy'n gallu cysylltu â'r gweinydd trwy http a'i brotocol deuaidd ei hun
  • cleient am weithio mewn pensaernïaeth dwy haen gyda chronfa ddata wedi'i lleoli ar yriant caled neu ffolder rhwydwaith
  • cleient gwe
  • offer gweinyddu gweinydd cais
  • amgylchedd datblygu (a elwir yn Configurator)
  • amgylchedd amser rhedeg ar gyfer iOS, Android a Windows Phone (platfform symudol 1C)

Mae'r holl rannau hyn, ac eithrio'r cleient gwe, wedi'u hysgrifennu yn C++. Yn ogystal, mae yna'r a gyhoeddwyd yn ddiweddar Cyflunydd cenhedlaeth newydd, wedi'i ysgrifennu yn Java.

Apiau brodorol

Defnyddir C++03 i ddatblygu cymwysiadau brodorol. Ar gyfer Windows, defnyddir Microsoft Visual C++ 12 (proffil sy'n gydnaws â Windows XP) fel casglwr, ac ar gyfer Linux ac Android - gcc 4.8, ar gyfer iOS - clang 5.0. Mae'r llyfrgell safonol a ddefnyddir yr un peth ar gyfer yr holl systemau gweithredu a chasglwyr - STLPort. Mae'r datrysiad hwn yn lleihau'r tebygolrwydd o gamgymeriadau gweithredu-benodol STL. Ar hyn o bryd rydym yn bwriadu mudo i'r gweithrediad STL a gludwyd gyda Clang, gan fod STLPort wedi'i derfynu ac yn anghydnaws â modd galluogi gcc's C++11.
Mae sylfaen cod y gweinydd yn 99% yn gyffredin, y cleient - 95%. Ar ben hynny, mae hyd yn oed y platfform symudol yn defnyddio'r un cod C ++ â'r un “mawr”, er bod canran yr uno yno ychydig yn is.
Fel y rhan fwyaf o ddefnyddwyr C++, nid ydym yn honni ein bod yn defnyddio 100% o alluoedd yr iaith a'i llyfrgelloedd. Felly, nid ydym yn ymarferol yn defnyddio Boost, ac un o'r nodweddion iaith yw castio math deinamig. Ar yr un pryd, rydym yn defnyddio'r canlynol yn weithredol:

  • STL (yn benodol llinynnau, cynwysyddion ac algorithmau)
  • etifeddiaeth lluosog, gan gynnwys. etifeddiaeth gweithredu lluosog
  • patrymau
  • eithriadau
  • awgrymiadau craff (gweithredu personol)

Trwy ddefnyddio etifeddiaeth lluosog o ryngwynebau (dosbarthiadau cwbl haniaethol), daw model cydran yn bosibl, a drafodir isod.

Cydrannau

Er mwyn sicrhau modiwlaidd, rhennir yr holl swyddogaethau yn gydrannau, sef llyfrgelloedd deinamig (*.dll ar gyfer Windows, *. felly ar gyfer Linux). Mae mwy na chant a hanner o gydrannau i gyd; dyma ddisgrifiadau o rai ohonynt:

ol-wyneb
Yn cynnwys y peiriant metadata platfform

accnt
Gwrthrychau y mae datblygwyr rhaglenni yn eu defnyddio i adeiladu cofnodion cyfrifyddu (siartiau cyfrifon a chofrestrau cyfrifyddu)

bsl
Peiriant gweithredu iaith wedi'i fewnosod

nuke
Gweithredu dyranwr cof yn bwrpasol

dbeng8
Peiriant cronfa ddata ffeil. Peiriant cronfa ddata gweinydd ffeiliau syml yn seiliedig ar ISAM, sydd hefyd yn cynnwys prosesydd SQL syml

wbase
Yn cynnwys y dosbarthiadau sylfaenol a'r swyddogaethau ar gyfer gweithredu rhyngwyneb defnyddiwr Windows - dosbarthiadau ffenestr, mynediad GDI, ac ati.

Mae rhannu'n gydrannau lluosog yn ddefnyddiol o sawl safbwynt:

  • Mae gwahanu yn hyrwyddo gwell dyluniad, yn enwedig ynysu cod gwell
  • O set o gydrannau gallwch chi gydosod gwahanol opsiynau dosbarthu yn hyblyg:
    • Er enghraifft, bydd gosodiad cleient tenau yn cynnwys wbase, ond ni fydd ganddo backend
    • ond ar y gweinydd wbase, i'r gwrthwyneb, ni bydd
    • bydd y ddau opsiwn wrth gwrs yn cynnwys nuke a bsl

Mae'r holl gydrannau sydd eu hangen ar gyfer yr opsiwn lansio hwn yn cael eu llwytho pan fydd y rhaglen yn dechrau. Mae hyn, yn arbennig, yn angenrheidiol ar gyfer cofrestru dosbarthiadau SCOM, a drafodir isod.

SCOM

Ar gyfer dadelfennu ar lefel is, defnyddir y system SCOM, llyfrgell debyg mewn ideoleg i ATL. I'r rhai nad ydynt wedi gweithio gydag ATL, rydym yn rhestru'n fyr y prif alluoedd a nodweddion.
Ar gyfer dosbarth SCOM a ddyluniwyd yn arbennig:

  • Yn darparu dulliau ffatri sy'n eich galluogi i greu dosbarth o gydran arall gan wybod ei enw yn unig (heb ddatgelu'r gweithrediad)
  • Yn darparu seilwaith pwyntydd clyfar sy'n cyfrif cyfeiriadau. Nid oes angen monitro oes dosbarth SCOM â llaw
  • Caniatáu i chi ddarganfod a yw gwrthrych yn gweithredu rhyngwyneb penodol a throsi pwyntydd i'r gwrthrych yn awtomatig i bwyntydd i'r rhyngwyneb
  • Creu gwrthrych gwasanaeth sydd bob amser yn hygyrch trwy'r dull get_service, ac ati.

Er enghraifft, gallwch ddisgrifio dosbarth ar gyfer darllen JSON (er enghraifft, JSONStreamReader) yn y gydran json.dll.
Gellir creu dosbarthiadau ac achosion o gydrannau eraill; mae angen eu cofrestru yn y peiriant SCOM:

SCOM_CLASS_ENTRY(JSONStreamReader)

Bydd y macro hwn yn disgrifio dosbarth recordydd sefydlog arbennig, a bydd y lluniwr yn cael ei alw pan fydd y gydran yn cael ei llwytho i'r cof.
Ar ôl hyn, gallwch greu enghraifft ohono mewn cydran arall:

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

I gefnogi gwasanaethau, mae SCOM yn cynnig seilwaith ychwanegol, braidd yn gymhleth. Yn ganolog iddo mae’r cysyniad o broses SCOM, sy’n gweithredu fel cynhwysydd ar gyfer rhedeg gwasanaethau (h.y., yn chwarae rôl Lleolwr Gwasanaeth), ac sydd hefyd yn cynnwys rhwymiad i adnoddau lleol. Mae'r broses SCOM ynghlwm wrth yr edefyn OS. Diolch i hyn, y tu mewn i'r cais gallwch dderbyn gwasanaethau fel hyn:

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

Ar ben hynny, trwy newid prosesau rhesymegol (SCOM) sy'n gysylltiedig ag edefyn, gallwch gael cymwysiadau sy'n ymarferol annibynnol o safbwynt y gofod gwybodaeth, yn rhedeg o fewn yr un edefyn. Dyma sut mae ein cleient tenau yn gweithio gyda chronfa ddata ffeiliau - y tu mewn i un broses OS mae dwy broses SCOM, un yn gysylltiedig â'r cleient, a'r ail gyda'r gweinydd. Mae'r dull hwn yn caniatáu inni uno'r gwaith o ysgrifennu cod a fydd yn gweithio ar y gronfa ddata ffeiliau lleol ac yn y fersiwn cleient-gweinydd “go iawn”. Mae'r pris ar gyfer unffurfiaeth o'r fath yn orbenion, ond mae arfer yn dangos ei fod yn werth chweil.

Yn seiliedig ar fodel cydran SCOM, mae rhesymeg busnes a rhan rhyngwyneb 1C: Enterprise yn cael eu gweithredu.

Rhyngwyneb defnyddiwr

Gyda llaw, am ryngwynebau. Nid ydym yn defnyddio rheolyddion safonol Windows; gweithredir ein rheolaethau yn uniongyrchol ar yr API Windows. Ar gyfer y fersiwn Linux, mae haen wedi'i gwneud sy'n gweithio trwy lyfrgell wxWidgets.
Nid yw'r llyfrgell o reolaethau yn dibynnu ar rannau eraill o 1C:Enterprise ac fe'i defnyddir gennym ni mewn sawl cyfleustodau mewnol bach arall.

Dros y blynyddoedd o ddatblygiad 1C:Menter, mae ymddangosiad rheolaethau wedi newid, ond dim ond unwaith y digwyddodd newid difrifol mewn egwyddorion, yn 2009, gyda rhyddhau fersiwn 8.2 a dyfodiad “ffurflenni rheoledig”. Yn ogystal â newid yr edrychiad, mae'r egwyddor o osodiad ffurf wedi newid yn sylfaenol - gwrthodwyd gosod elfennau picsel-wrth-picsel o blaid gosodiad llif yr elfennau. Yn ogystal, yn y model newydd, nid yw rheolyddion yn gweithio'n uniongyrchol gyda gwrthrychau parth, ond gyda DTOs arbennig (Gwrthrychau Trosglwyddo Data).
Roedd y newidiadau hyn yn ei gwneud hi'n bosibl creu cleient gwe 1C:Enterprise sy'n ailadrodd rhesymeg C++ rheolaethau JavaScript. Rydym yn ceisio cynnal cywerthedd swyddogaethol rhwng cleientiaid tenau a gwe. Mewn achosion lle nad yw hyn yn bosibl, er enghraifft oherwydd cyfyngiadau'r API JavaScript sydd ar gael (er enghraifft, mae'r gallu i weithio gyda ffeiliau yn gyfyngedig iawn), rydym yn aml yn gweithredu'r swyddogaeth angenrheidiol gan ddefnyddio estyniadau porwr a ysgrifennwyd yn C ++. Ar hyn o bryd rydym yn cefnogi Internet Explorer a Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows a Linux) a Safari (MacOS).

Yn ogystal, defnyddir technoleg ffurflenni rheoledig i greu rhyngwyneb ar gyfer cymwysiadau symudol ar y platfform 1C. Ar ddyfeisiadau symudol, mae rendro rheolyddion yn cael ei weithredu gan ddefnyddio technolegau sy'n frodorol i'r system weithredu, ond ar gyfer rhesymeg gosodiad y ffurf ac ymateb rhyngwyneb, defnyddir yr un cod ag yn y platfform 1C:Menter “mawr”.

Llwyfan "1C: Menter" - beth sydd o dan y cwfl?
Rhyngwyneb 1C ar Linux OS

Llwyfan "1C: Menter" - beth sydd o dan y cwfl?
Rhyngwyneb 1C ar ddyfais symudol

Rhyngwyneb 1C ar lwyfannau eraill Llwyfan "1C: Menter" - beth sydd o dan y cwfl?
Rhyngwyneb 1C ar Windows OS

Llwyfan "1C: Menter" - beth sydd o dan y cwfl?
Rhyngwyneb 1C - cleient gwe

ffynhonnell agored

Er nad ydym yn defnyddio llyfrgelloedd safonol ar gyfer datblygwyr C ++ o dan Windows (MFC, rheolaethau o WinAPI), nid ydym yn ysgrifennu'r holl gydrannau ein hunain. Soniwyd eisoes am y llyfrgell wxWidgets, ac rydym hefyd yn defnyddio:

  • cURL ar gyfer gweithio gyda HTTP a FTP.
  • OpenSSL ar gyfer gweithio gyda cryptograffeg a sefydlu cysylltiadau TLS
  • libxml2 a libxslt ar gyfer dosrannu XML
  • libetpan ar gyfer gweithio gyda phrotocolau post (POP3, SMTP, IMAP)
  • dynwaredol i ddosrannu negeseuon e-bost
  • sqllite ar gyfer storio logiau defnyddwyr
  • ICU ar gyfer rhyngwladoli

Mae'r rhestr yn mynd ymlaen.
Yn ogystal, rydym yn defnyddio fersiwn hynod addasedig Prawf Google и Ffug Google wrth ddatblygu profion uned.
Roedd angen addasu'r llyfrgelloedd i fod yn gydnaws â model sefydliad cydrannol SCOM.
Mae mynychder 1C yn gwneud y platfform yn brawf cryfder rhagorol ar gyfer y llyfrgelloedd a ddefnyddir ynddo. Mae amrywiaeth o ddefnyddwyr a senarios yn datgelu gwallau yn gyflym hyd yn oed yn y meysydd cod a ddefnyddir amlaf. Rydyn ni'n eu cywiro ein hunain ac yn ceisio eu rhoi yn ôl i awduron y llyfrgell. Mae'r profiad o ryngweithio yn troi allan i fod yn wahanol iawn.
Datblygwyr cURL и libetpan ymateb yn gyflym i geisiadau tynnu, ond mae'r clwt, er enghraifft, yn OpenSSL Wnaethon ni erioed lwyddo i'w roi yn ôl.

Casgliad

Yn yr erthygl fe wnaethom gyffwrdd â sawl prif agwedd ar ddatblygiad y llwyfan 1C: Menter. Yng nghwmpas cyfyngedig yr erthygl, ni chyffyrddwyd â dim ond rhai agweddau diddorol, yn ein barn ni.
Gellir dod o hyd i ddisgrifiad cyffredinol o'r gwahanol fecanweithiau platfform yma.
Pa bynciau fyddai o ddiddordeb i chi mewn erthyglau yn y dyfodol?

Sut mae platfform symudol 1C yn cael ei weithredu?
Disgrifiad o strwythur mewnol y cleient gwe?
Neu efallai bod gennych ddiddordeb yn y broses o ddewis nodweddion ar gyfer datganiadau newydd, eu datblygu a'u profi?

Ysgrifennwch yn y sylwadau!

Ffynhonnell: hab.com

Ychwanegu sylw