Jukwaa "1C: Biashara" - ni nini chini ya kofia?

Habari Habr!
Katika makala hii tutaanza hadithi kuhusu jinsi inavyofanya kazi ndani jukwaa "1C:Enterprise 8" na ni teknolojia gani zinazotumika katika maendeleo yake.

Jukwaa "1C: Biashara" - ni nini chini ya kofia?

Kwa nini tunafikiri hii inavutia? Kwanza, kwa sababu jukwaa la 1C:Enterprise 8 ni programu kubwa (zaidi ya milioni 10 ya mistari ya msimbo) katika C++ (mteja, seva, n.k.), JavaScript (mteja wa wavuti), na, hivi karibuni zaidi, Na. Java. Miradi mikubwa inaweza kuvutia angalau kwa sababu ya kiwango chao, kwa sababu masuala ambayo hayaonekani katika msingi mdogo wa kanuni hutokea kwa nguvu kamili katika miradi hiyo. Pili, "1C:Enterprise" ni bidhaa inayoweza kuigwa, "iliyowekwa kwenye sanduku", na kuna nakala chache sana kuhusu maendeleo kama haya kwenye Habre. Pia inafurahisha kila wakati kujua jinsi maisha yalivyo katika timu na kampuni zingine.

Basi hebu tuanze. Katika makala hii tutatoa muhtasari wa baadhi ya teknolojia zinazotumiwa kwenye jukwaa na kuelezea mazingira, bila kupiga mbizi kwa undani katika utekelezaji. Hakika, kwa taratibu nyingi, hadithi ya kina ingehitaji makala tofauti, na kwa baadhi, kitabu kizima!
Kwa kuanzia, inafaa kuamua kuhusu mambo ya msingi - 1C:Jukwaa la Biashara ni nini na linajumuisha vipengele vipi. Jibu la swali hili si rahisi sana, kwa sababu neno "Jukwaa" (kwa ufupi, tutaliita hivyo) linamaanisha njia ya kuendeleza maombi ya biashara, mazingira ya wakati wa kukimbia, na zana za utawala. Vipengele vifuatavyo vinaweza kutofautishwa takriban:

  • kundi la seva
  • mteja "nyembamba" anayeweza kuunganisha kwenye seva kupitia http na itifaki yake ya binary
  • mteja kwa kufanya kazi katika usanifu wa ngazi mbili na hifadhidata iko kwenye gari ngumu au folda ya mtandao
  • mteja wa wavuti
  • zana za usimamizi wa seva ya programu
  • mazingira ya maendeleo (inayojulikana kama Configurator)
  • mazingira ya wakati wa kukimbia kwa iOS, Android na Windows Phone (jukwaa la rununu 1C)

Sehemu hizi zote, isipokuwa mteja wa wavuti, zimeandikwa kwa C++. Zaidi ya hayo, kuna iliyotangazwa hivi karibuni Kisanidi cha kizazi kipya, iliyoandikwa kwa Java.

Programu asili

C++03 inatumika kutengeneza programu asilia. Kwa Windows, Microsoft Visual C++ 12 (wasifu unaoendana na Windows XP) hutumiwa kama mkusanyaji, na kwa Linux na Android - gcc 4.8, kwa iOS - clang 5.0. Maktaba ya kawaida inayotumiwa ni sawa kwa mifumo yote ya uendeshaji na wakusanyaji - STLPort. Suluhisho hili linapunguza uwezekano wa makosa mahususi ya utekelezaji wa STL. Kwa sasa tunapanga kuhamia utekelezaji wa STL iliyosafirishwa kwa Clang, kwa kuwa STLPort imekomeshwa na haioani na hali ya kuwezesha ya gcc ya C++11.
Msingi wa nambari ya seva ni 99% ya kawaida, mteja - 95%. Zaidi ya hayo, hata jukwaa la rununu hutumia msimbo sawa wa C++ kama ule "kubwa", ingawa asilimia ya kuunganishwa huko ni ndogo kwa kiasi fulani.
Kama watumiaji wengi wa C++, hatudai kuwa tunatumia 100% ya uwezo wa lugha na maktaba zake. Kwa hivyo, kwa kweli hatutumii Boost, na mojawapo ya vipengele vya lugha ni utumaji wa aina unaobadilika. Wakati huo huo, tunatumia kikamilifu:

  • STL (haswa kamba, vyombo na algoriti)
  • urithi nyingi, ikiwa ni pamoja na. urithi wa utekelezaji nyingi
  • mifumo
  • isipokuwa
  • viashiria smart (utekelezaji maalum)

Kwa kutumia urithi mwingi wa miingiliano (madarasa ya kufikirika kabisa), muundo wa sehemu unawezekana, ambao utajadiliwa hapa chini.

Vipengele

Ili kuhakikisha urekebishaji, utendakazi wote umegawanywa katika vipengele, ambavyo ni maktaba zinazobadilika (*.dll kwa Windows, *.so kwa Linux). Kuna zaidi ya vipengele mia moja na hamsini kwa jumla; hapa kuna maelezo ya baadhi yao:

nyuma
Ina injini ya metadata ya jukwaa

accnt
Vitu ambavyo wasanidi programu hutumia kuunda rekodi za uhasibu (chati za akaunti na rejista za uhasibu)

bsl
Injini ya utekelezaji wa lugha iliyopachikwa

nuke
Utekelezaji maalum wa kigawa kumbukumbu

dbeng8
Injini ya hifadhidata ya faili. Injini rahisi ya hifadhidata ya seva ya faili kulingana na ISAM, ambayo pia inajumuisha kichakataji rahisi cha SQL

wbase
Ina madarasa ya msingi na kazi za kutekeleza kiolesura cha mtumiaji wa Windows - madarasa ya dirisha, ufikiaji wa GDI, nk.

Kugawanya katika vipengele vingi ni muhimu kutoka kwa maoni kadhaa:

  • Utengano hukuza muundo bora, haswa utengaji bora wa msimbo
  • Kutoka kwa seti ya vifaa unaweza kukusanya chaguzi tofauti za uwasilishaji kwa urahisi:
    • Kwa mfano, usakinishaji mwembamba wa mteja utakuwa na wbase, lakini hautakuwa na backend
    • lakini kwenye seva ya wbase, kinyume chake, haitakuwa
    • chaguzi zote mbili bila shaka zitakuwa na nuke na bsl

Vipengele vyote vinavyohitajika kwa chaguo hili la uzinduzi hupakiwa wakati programu inapoanza. Hii, hasa, ni muhimu kwa kusajili madarasa ya SCOM, ambayo yatajadiliwa hapa chini.

SCOM

Kwa mtengano katika kiwango cha chini, mfumo wa SCOM hutumiwa, maktaba sawa katika itikadi na ATL. Kwa wale ambao hawajafanya kazi na ATL, tunaorodhesha kwa ufupi uwezo na vipengele kuu.
Kwa darasa maalum la SCOM:

  • Hutoa njia za kiwanda zinazokuruhusu kuunda darasa kutoka kwa sehemu nyingine ukijua jina lake tu (bila kufichua utekelezaji)
  • Hutoa miundombinu ya kielekezi mahiri cha kuhesabu marejeleo. Muda wa maisha wa darasa la SCOM hauhitaji kufuatiliwa kwa mikono
  • Inakuruhusu kujua kama kitu kinatumia kiolesura maalum na kubadilisha kiatomati kielekezi hadi kitu hadi kielekezi hadi kiolesura.
  • Unda kitu cha huduma ambacho kinapatikana kila wakati kupitia get_service mbinu, n.k.

Kwa mfano, unaweza kuelezea darasa la kusoma JSON (kwa mfano, JSONStreamReader) katika kijenzi cha json.dll.
Madarasa na matukio yanaweza kuundwa kutoka kwa vipengele vingine; yanahitaji kusajiliwa katika mashine ya SCOM:

SCOM_CLASS_ENTRY(JSONStreamReader)

Macro hii itaelezea darasa maalum la kinasa sauti, mjenzi ambaye ataitwa wakati sehemu hiyo imefungwa kwenye kumbukumbu.
Baada ya hayo, unaweza kuunda mfano wake katika sehemu nyingine:

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

Ili kusaidia huduma, SCOM inatoa miundombinu ya ziada, badala tata. Muhimu kwake ni dhana ya mchakato wa SCOM, ambayo hutumika kama chombo cha kuendesha huduma (yaani, ina jukumu la Kipata Huduma), na pia ina mshikamano kwa rasilimali zilizojanibishwa. Mchakato wa SCOM umefungwa kwenye uzi wa OS. Shukrani kwa hili, ndani ya programu unaweza kupokea huduma kama hii:

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

Zaidi ya hayo, kwa kubadili michakato ya kimantiki (SCOM) iliyofungwa kwenye thread, unaweza kupata programu ambazo zinajitegemea kivitendo kutoka kwa mtazamo wa nafasi ya habari, zinazoendesha ndani ya thread sawa. Hivi ndivyo mteja wetu mwembamba anavyofanya kazi na hifadhidata ya faili - ndani ya mchakato mmoja wa OS kuna michakato miwili ya SCOM, moja inayohusishwa na mteja, na ya pili na seva. Mbinu hii inaturuhusu kuunganisha uandishi wa msimbo ambao utafanya kazi kwenye hifadhidata ya faili za ndani na katika toleo la "halisi" la seva ya mteja. Bei ya usawa kama huo ni ya juu, lakini mazoezi yanaonyesha kuwa inafaa.

Kulingana na muundo wa kipengele cha SCOM, mantiki ya biashara na sehemu ya kiolesura ya 1C: Enterprise inatekelezwa.

Usanidi wa mtumiaji

Kwa njia, kuhusu interfaces. Hatutumii vidhibiti vya kawaida vya Windows; vidhibiti vyetu vinatekelezwa moja kwa moja kwenye API ya Windows. Kwa toleo la Linux, safu imetengenezwa ambayo inafanya kazi kupitia maktaba ya wxWidgets.
Maktaba ya vidhibiti haitegemei sehemu zingine za 1C:Enterprise na hutumiwa na sisi katika huduma zingine kadhaa ndogo za ndani.

Kwa miaka mingi ya maendeleo ya 1C:Enterprise, kuonekana kwa udhibiti kumebadilika, lakini mabadiliko makubwa katika kanuni yalitokea mara moja tu, mwaka wa 2009, na kutolewa kwa toleo la 8.2 na ujio wa "fomu zilizosimamiwa". Mbali na kubadilisha mwonekano, kanuni ya mpangilio wa fomu imebadilika kimsingi - kulikuwa na kukataliwa kwa nafasi ya pixel-na-pixel ya vipengele kwa ajili ya mpangilio wa mtiririko wa vipengele. Kwa kuongeza, katika mtindo mpya, udhibiti haufanyi kazi moja kwa moja na vitu vya kikoa, lakini kwa DTO maalum (Vitu vya Kuhamisha Data).
Mabadiliko haya yalifanya iwezekane kuunda mteja wa wavuti wa 1C:Enterprise ambao unaiga mantiki ya C++ ya vidhibiti vya JavaScript. Tunajaribu kudumisha usawa wa utendaji kati ya wateja nyembamba na wavuti. Katika hali ambapo hii haiwezekani, kwa mfano kutokana na mapungufu ya API ya JavaScript inapatikana (kwa mfano, uwezo wa kufanya kazi na faili ni mdogo sana), mara nyingi tunatekeleza utendaji muhimu kwa kutumia viendelezi vya kivinjari vilivyoandikwa katika C ++. Kwa sasa tunaauni Internet Explorer na Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows na Linux) na Safari (MacOS).

Kwa kuongeza, teknolojia ya fomu zinazosimamiwa hutumiwa kuunda kiolesura cha programu za simu kwenye jukwaa la 1C. Kwenye vifaa vya rununu, utoaji wa vidhibiti hutekelezwa kwa kutumia teknolojia asilia ya mfumo wa uendeshaji, lakini kwa mantiki ya mpangilio wa fomu na majibu ya kiolesura, msimbo sawa unatumika kama katika "jukwaa kubwa" la 1C:Enterprise.

Jukwaa "1C: Biashara" - ni nini chini ya kofia?
1C interface kwenye Linux OS

Jukwaa "1C: Biashara" - ni nini chini ya kofia?
1C interface kwenye simu ya mkononi

1C interface kwenye majukwaa mengine Jukwaa "1C: Biashara" - ni nini chini ya kofia?
1C interface kwenye Windows OS

Jukwaa "1C: Biashara" - ni nini chini ya kofia?
Kiolesura cha 1C - mteja wa wavuti

wazi chanzo

Ingawa hatutumii maktaba ya kawaida kwa wasanidi wa C++ chini ya Windows (MFC, vidhibiti kutoka WinAPI), hatuandiki vipengele vyote sisi wenyewe. Maktaba tayari imetajwa WxWijeti, na pia tunatumia:

  • cURL kwa kufanya kazi na HTTP na FTP.
  • OpenSSL kwa kufanya kazi na cryptography na kuanzisha miunganisho ya TLS
  • libxml2 na libxslt kwa uchanganuzi wa XML
  • libertpan kwa kufanya kazi na itifaki za barua (POP3, SMTP, IMAP)
  • mwigizaji kuchanganua barua pepe
  • sqllite kwa kuhifadhi kumbukumbu za watumiaji
  • ICU kwa ajili ya kimataifa

Orodha inaendelea.
Zaidi ya hayo, tunatumia toleo lililobadilishwa sana Google Test ΠΈ Google Mock wakati wa kuunda vipimo vya kitengo.
Maktaba zilihitaji urekebishaji ili kuendana na muundo wa shirika la sehemu ya SCOM.
Kuenea kwa 1C hufanya jukwaa kuwa jaribio bora la nguvu kwa maktaba zinazotumiwa ndani yake. Watumiaji na hali mbalimbali hufichua kwa haraka hitilafu katika sehemu za msimbo ambazo hazitumiwi sana. Tunazirekebisha sisi wenyewe na kujaribu kuzirejesha kwa waandishi wa maktaba. Uzoefu wa mwingiliano unageuka kuwa tofauti sana.
Waendelezaji cURL ΠΈ libertpan jibu haraka maombi ya kuvuta, lakini kiraka, kwa mfano, ndani OpenSSL Hatukuweza kurudisha.

Hitimisho

Katika makala tuligusa mambo kadhaa kuu ya maendeleo ya 1C: jukwaa la Biashara. Katika upeo mdogo wa makala, tuligusa baadhi tu ya kuvutia, kwa maoni yetu, vipengele.
Maelezo ya jumla ya mifumo mbalimbali ya jukwaa yanaweza kupatikana hapa.
Ni mada gani ambazo zingekuvutia katika makala zijazo?

Je, jukwaa la rununu la 1C linatekelezwa vipi?
Maelezo ya muundo wa ndani wa mteja wa wavuti?
Au labda una nia ya mchakato wa kuchagua vipengele vya matoleo mapya, kuendeleza na kupima?

Andika kwenye maoni!

Chanzo: mapenzi.com

Kuongeza maoni