Platform "1C: Enterprise" - naon handapeun tiung?

Héy Habr!
Dina artikel ieu kami baris dimimitian carita ngeunaan kumaha gawéna di jero platform "1C: Enterprise 8" sareng téknologi naon anu dianggo dina pangwangunanana.

Platform "1C: Enterprise" - naon handapeun tiung?

Naha urang pikir ieu metot? Anu mimiti, sabab platform 1C: Enterprise 8 mangrupikeun aplikasi ageung (leuwih ti 10 juta baris kode) dina C ++ (klien, server, jsb.), JavaScript (klien wéb), sareng, langkung énggal, sareng Jawa. Proyék ageung tiasa pikaresepeun sahenteuna kusabab skalana, sabab masalah anu teu katingali dina dasar kode leutik timbul dina gaya pinuh dina proyék sapertos kitu. Bréh, "1C: Enterprise" mangrupakeun replicable, "boxed" produk, sarta aya saeutik pisan artikel ngeunaan kamajuan misalna dina Habré. Éta ogé sok pikaresepeun pikeun terang kumaha kahirupan di tim sareng perusahaan sanés.

Ku kituna hayu urang ngamimitian. Dina artikel ieu kami baris masihan tinjauan sababaraha téknologi anu dipaké dina platform jeung outline bentang, tanpa diving deeply kana palaksanaan. Mémang, pikeun seueur mékanisme, carita anu lengkep bakal meryogikeun tulisan anu misah, sareng pikeun sababaraha, sadayana buku!
Pikeun mimitian ku, éta patut mutuskeun dina hal dasar - naon platform 1C: Perusahaan sareng naon komponénna. Jawaban kana patarosan ieu henteu saderhana pisan, sabab istilah "Platform" (pikeun singgetan, urang bakal nyebatna ku cara éta) nujul kana sarana pikeun ngembangkeun aplikasi bisnis, lingkungan runtime, sareng alat administrasi. Komponén di handap ieu tiasa dibédakeun sacara kasar:

  • klaster server
  • klien "ipis" sanggup nyambung ka server via http jeung protokol binér sorangan
  • klien pikeun digawé dina arsitéktur dua tingkat jeung database lokasina dina hard drive atawa folder jaringan
  • klien wéb
  • alat administrasi server aplikasi
  • lingkungan pangwangunan (katelah Configurator)
  • lingkungan runtime pikeun ios, Android sareng Windows Phone (platform mobile 1C)

Sadaya bagian ieu, iwal ti klien web, ditulis dina C ++. Salaku tambahan, aya anu nembe diumumkeun Configurator generasi anyar, ditulis dina basa Jawa.

Aplikasi pribumi

C++ 03 dianggo pikeun ngembangkeun aplikasi asli. Pikeun Windows, Microsoft Visual C ++ 12 (profil cocog sareng Windows XP) dianggo salaku kompiler, sareng pikeun Linux sareng Android - gcc 4.8, pikeun ios - clang 5.0. Perpustakaan standar anu dianggo sami pikeun sadaya sistem operasi sareng kompiler - STLPort. Leyuran ieu ngurangan likelihood kasalahan palaksanaan-spésifik STL. Urang ayeuna keur perencanaan migrasi ka palaksanaan STL shipped kalawan CLang, sakumaha STLPort geus dilanjutkeun sarta sauyunan jeung gcc urang C ++ 11 mode aktip.
Dasar kode server nyaéta 99% umum, klien - 95%. Sumawona, bahkan platform mobile nganggo kode C ++ anu sami sareng "badag", sanaos persentase ngahijikeunana rada handap.
Sapertos sabagéan ageung pangguna C ++, kami henteu ngaku ngagunakeun 100% kamampuan basa sareng perpustakaan na. Janten, urang sacara praktis henteu nganggo Boost, sareng salah sahiji fitur basa nyaéta casting jinis dinamis. Dina waktos anu sami, kami aktip ngagunakeun:

  • STL (husus string, wadah sareng algoritma)
  • sababaraha warisan, kaasup. sababaraha warisan palaksanaan
  • nyai
  • pangaluaran
  • pointers pinter (palaksanaan custom)

Ku ngagunakeun sababaraha warisan interfaces (kelas lengkep abstrak), model komponén jadi mungkin, nu bakal dibahas dihandap.

komponén

Pikeun mastikeun modularitas, sadaya fungsionalitas dibagi kana komponén, nyaéta perpustakaan dinamis (*.dll pikeun Windows, *.jadi pikeun Linux). Jumlahna aya leuwih ti saratus lima puluh komponén; ieu pedaran sababaraha di antarana:

backend
Ngandung mesin metadata platform

accnt
Objék anu dianggo ku pamekar aplikasi pikeun ngawangun rékaman akuntansi (bagan akun sareng daptar akuntansi)

bsl
Mesin palaksanaan basa anu dipasang

nuke
palaksanaan custom of allocator memori

dbeng8
Mesin database file. Mesin database server file basajan dumasar kana ISAM, nu ogé ngawengku hiji prosésor SQL basajan

wbase
Ngandung kelas dasar sareng fungsi pikeun nerapkeun antarbeungeut pangguna Windows - kelas jandela, aksés GDI, jsb.

Ngabagi kana sababaraha komponén mangpaat tina sababaraha sudut pandang:

  • Separation promotes desain hadé, hususna isolasi kode hadé
  • Tina sakumpulan komponén anjeun tiasa sacara fleksibel ngumpul pilihan pangiriman anu béda:
    • Contona, hiji instalasi klien ipis bakal ngandung wbase, tapi moal boga backend
    • tapi dina server wbase, sabalikna, éta moal
    • duanana pilihan bakal tangtu ngandung nuke na bsl

Sadaya komponén anu diperyogikeun pikeun pilihan peluncuran ieu dimuat nalika program dimimitian. Ieu, khususna, dipikabutuh pikeun ngadaptar kelas SCOM, anu bakal dibahas di handap.

SCOM

Pikeun dékomposisi dina tingkat handap, sistem SCOM dipaké, perpustakaan sarupa dina idéologi jeung ATL. Pikeun anu teu acan damel sareng ATL, kami daptar sakedap kamampuan sareng fitur utama.
Pikeun kelas SCOM dirancang husus:

  • Nyayogikeun metode pabrik anu ngamungkinkeun anjeun nyiptakeun kelas tina komponén anu sanés ngan ukur terang namina (tanpa ngungkabkeun palaksanaan)
  • Nyadiakeun infrastruktur pointer pinter ngitung rujukan. Hirup kelas SCOM henteu kedah diawaskeun sacara manual
  • Ngidinan anjeun pikeun terang naha hiji obyék ngalaksanakeun antarmuka khusus sareng otomatis ngarobih pointer kana obyék kana pointer kana antarmuka.
  • Jieun obyék jasa anu salawasna diaksés ngaliwatan métode get_service, jsb.

Contona, anjeun tiasa ngajelaskeun kelas pikeun maca JSON (Contona, JSONStreamReader) dina komponén json.dll.
Kelas sareng instansi tiasa didamel tina komponén sanés; aranjeunna kedah didaptarkeun dina mesin SCOM:

SCOM_CLASS_ENTRY(JSONStreamReader)

makro ieu bakal ngajelaskeun hiji kelas recorder statik husus, constructor nu bakal disebut nalika komponén dimuat kana mémori.
Saatos ieu, anjeun tiasa nyiptakeun conto dina komponén anu sanés:

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

Pikeun ngadukung jasa, SCOM nawiskeun infrastruktur tambahan anu rada kompleks. Puseur kana éta konsép prosés SCOM, nu boga fungsi minangka wadah pikeun ngajalankeun jasa (ie, muterkeun peran Service Locator), sarta ogé ngandung hiji mengikat sumberdaya localized. Prosés SCOM dihijikeun ka thread OS. Hatur nuhun kana ieu, di jero aplikasi anjeun tiasa nampi jasa sapertos kieu:

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

Sumawona, ku ngagentos prosés logis (SCOM) anu dihijikeun kana benang, anjeun tiasa nampi aplikasi anu sacara praktis bebas tina sudut pandang rohangan inpormasi, ngajalankeun dina benang anu sami. Ieu kumaha klien ipis kami tiasa dianggo sareng database file - dina hiji prosés OS aya dua prosés SCOM, hiji pakait sareng klien, sareng anu kadua sareng server. Pendekatan ieu ngamungkinkeun urang pikeun ngahijikeun tulisan kode anu bakal dianggo dina database file lokal sareng dina versi klien-server "nyata". Harga pikeun uniformity sapertos overhead, tapi prakték nunjukkeun yén éta patut eta.

Dumasar kana modél komponén SCOM, duanana logika bisnis sareng bagian antarmuka 1C: Perusahaan dilaksanakeun.

Antarbeungeut pangguna

Ku jalan kitu, ngeunaan interfaces. Kami henteu nganggo kadali Windows standar; kadali kami dilaksanakeun langsung dina API Windows. Pikeun vérsi Linux, lapisan parantos dilakukeun anu tiasa dianggo ngaliwatan perpustakaan wxWidgets.
Perpustakaan kadali henteu gumantung kana bagian séjén 1C: Perusahaan sareng dianggo ku kami dina sababaraha utilitas internal leutik anu sanés.

Ngaliwatan taun ngembangkeun 1C: Perusahaan, penampilan kadali geus robah, tapi parobahan serius dina prinsip lumangsung ngan sakali, dina 2009, jeung sékrési versi 8.2 jeung mecenghulna "formulir junun". Salian ngarobah penampilan, prinsip perenah formulir geus fundamentally robah - aya tampikan ti piksel-demi-piksel positioning elemen dina ni'mat aliran-layout elemen. Sajaba ti éta, dina modél anyar, kadali teu jalan langsung jeung objék domain, tapi kalawan DTOs husus (Objék Mindahkeun Data).
Parobihan ieu ngamungkinkeun pikeun nyiptakeun klien wéb 1C: Perusahaan anu réplikasi logika C++ tina kadali JavaScript. Kami nyobian ngajaga kasatimbangan fungsional antara klien ipis sareng wéb. Dina kasus dimana ieu teu mungkin, contona alatan keterbatasan JavaScript API sadia (contona, kamampuhan pikeun digawekeun ku file pisan kawates), urang mindeng nerapkeun pungsionalitas diperlukeun ngagunakeun ekstensi browser ditulis dina C ++. Kami ayeuna ngadukung Internet Explorer sareng Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows sareng Linux) sareng Safari (MacOS).

Sajaba ti éta, téhnologi formulir junun dipaké pikeun nyieun hiji panganteur pikeun aplikasi mobile dina platform 1C. Dina alat sélulér, rendering kontrol dilaksanakeun nganggo téknologi asli tina sistem operasi, tapi pikeun logika perenah bentuk sareng réspon antarmuka, kode anu sami dianggo sapertos dina "badag" 1C: platform Perusahaan.

Platform "1C: Enterprise" - naon handapeun tiung?
Antarbeungeut 1C dina OS Linux

Platform "1C: Enterprise" - naon handapeun tiung?
panganteur 1C dina alat mobile

Antarbeungeut 1C dina platform anu sanés Platform "1C: Enterprise" - naon handapeun tiung?
Antarbeungeut 1C dina OS Windows

Platform "1C: Enterprise" - naon handapeun tiung?
Panganteur 1C - klien wéb

Open sumber

Sanajan urang teu make perpustakaan baku pikeun C ++ pamekar dina Windows (MFC, kadali ti WinAPI), urang teu nulis sakabéh komponén sorangan. Perpustakaan parantos disebatkeun wxWidgets, sarta kami ogé ngagunakeun:

  • curl pikeun gawé bareng HTTP na FTP.
  • OpenSSL pikeun gawé bareng kriptografi jeung ngadegkeun sambungan TLS
  • libxml2 sareng libxslt pikeun parsing XML
  • libetpan pikeun gawé bareng protokol surat (POP3, SMTP, IMAP)
  • niru-niru pikeun parse talatah surelek
  • sqllite pikeun nyimpen log pamaké
  • ICU pikeun internasionalisasi

daftar nuluykeun.
Salaku tambahan, kami nganggo versi anu dirobih pisan Tés Google и Google Mock nalika ngamekarkeun tés unit.
Perpustakaan peryogi adaptasi supados cocog sareng modél organisasi komponén SCOM.
Prévalénsi 1C ngajantenkeun platform éta tés kakuatan anu saé pikeun perpustakaan anu dianggo di dinya. Rupa-rupa pangguna sareng skenario gancang ngungkabkeun kasalahan bahkan di daérah kode anu paling jarang dianggo. Kami ngabenerkeunana sorangan sareng nyobian masihan deui ka panulis perpustakaan. Pangalaman interaksi tétéla béda pisan.
pamekar curl и libetpan ngabales gancang narik-pamundut, tapi patch, contona, di OpenSSL Simkuring pernah junun masihan deui.

kacindekan

Dina tulisan éta kami nyabak sababaraha aspék utama pangembangan 1C: platform Perusahaan. Dina wengkuan kawates artikel, urang keuna kana ngan sababaraha metot, dina pamadegan urang, aspék.
Katerangan umum ngeunaan rupa-rupa mékanisme platform tiasa dipendakan di dieu.
Topik naon anu dipikaresep ku anjeun dina tulisan anu bakal datang?

Kumaha platform mobile 1C dilaksanakeun?
Katerangan ngeunaan struktur internal klien wéb?
Atawa meureun anjeun kabetot dina prosés milih fitur keur release anyar, ngamekarkeun jeung nguji?

Tulis dina komentar!

sumber: www.habr.com

Tambahkeun komentar