Platform "1C: Enterprise" - apa ing hood?

Hey Habr!
Ing artikel iki, kita bakal miwiti crita babagan cara kerjane ing njero platform "1C: Enterprise 8" lan teknologi apa sing digunakake ing pangembangane.

Platform "1C: Enterprise" - apa ing hood?

Apa kita mikir iki menarik? Kaping pisanan, amarga platform 1C: Enterprise 8 minangka aplikasi gedhe (luwih saka 10 yuta baris kode) ing C++ (klien, server, lsp.), JavaScript (klien web), lan, luwih anyar, Lan Jawa. Proyèk gedhe bisa dadi menarik paling ora amarga ukurane, amarga masalah sing ora katon ing basis kode cilik muncul kanthi kekuatan lengkap ing proyek kasebut. Kapindho, "1C:Enterprise" minangka produk "kotak" sing bisa ditiru, lan ana sawetara artikel babagan perkembangan kasebut ing Habré. Iku uga tansah menarik kanggo ngerti carane urip ing tim lan perusahaan liyane.

Dadi ayo miwiti. Ing artikel iki kita bakal menehi ringkesan sawetara teknologi sing digunakake ing platform lan njelaske nganggo bentuk garis lanskap, tanpa nyilem rumiyin menyang implementasine. Pancen, kanggo akeh mekanisme, crita sing rinci mbutuhake artikel sing kapisah, lan kanggo sawetara, kabeh buku!
Kanggo miwiti, sampeyan kudu mutusake babagan dhasar - apa platform 1C: Enterprise lan komponen apa wae. Jawaban kanggo pitakonan iki ora gampang banget, amarga istilah "Platform" (kanggo ringkesan, kita bakal nyebataken cara kasebut) nuduhake sarana kanggo ngembangake aplikasi bisnis, lingkungan runtime, lan alat administrasi. Komponen ing ngisor iki bisa dibedakake kanthi kasar:

  • kluster server
  • klien "tipis" bisa nyambung menyang server liwat http lan protokol binar dhewe
  • klien kanggo makarya ing arsitektur loro-undakan karo database dumunung ing hard drive utawa folder jaringan
  • klien web
  • alat administrasi server aplikasi
  • lingkungan pangembangan (dikenal minangka Configurator)
  • lingkungan runtime kanggo iOS, Android lan Windows Phone (platform seluler 1C)

Kabeh bagean kasebut, kajaba klien web, ditulis ing C++. Kajaba iku, ana sing bubar diumumake Configurator generasi anyar, ditulis nganggo aksara Jawa.

Aplikasi asli

C++ 03 digunakake kanggo ngembangake aplikasi asli. Kanggo Windows, Microsoft Visual C++ 12 (profil sing kompatibel karo Windows XP) digunakake minangka compiler, lan kanggo Linux lan Android - gcc 4.8, kanggo iOS - clang 5.0. Pustaka standar sing digunakake padha kanggo kabeh sistem operasi lan compiler - STLPort. Solusi iki nyuda kemungkinan kesalahan khusus implementasi STL. Saiki kita arep pindhah menyang implementasi STL sing dikirim karo CLang, amarga STLPort wis mandheg lan ora kompatibel karo mode aktif C ++ 11 gcc.
Basis kode server 99% umum, klien - 95%. Kajaba iku, malah platform seluler nggunakake kode C ++ sing padha karo "gedhe", sanajan persentase penyatuan ana rada luwih murah.
Kaya umume pangguna C ++, kita ora ngaku nggunakake 100% kemampuan basa lan perpustakaane. Dadi, kita praktis ora nggunakake Boost, lan salah sawijining fitur basa yaiku casting jinis dinamis. Ing wektu sing padha, kita aktif nggunakake:

  • STL (khusus strings, containers and algorithms)
  • pirang-pirang warisan, kalebu. sawetara warisan implementasine
  • pola
  • pangecualian
  • pitunjuk cerdas (implementasi khusus)

Kanthi nggunakake macem-macem warisan antarmuka (kelas abstrak rampung), model komponen dadi bisa, sing bakal dibahas ing ngisor iki.

Komponen

Kanggo njamin modularitas, kabeh fungsi dipérang dadi komponen, yaiku perpustakaan dinamis (*.dll kanggo Windows, *.so kanggo Linux). Ana luwih saka satus seket komponen ing total; ing ngisor iki gambaran saka sawetara:

backend
Ngandhut mesin metadata platform

accnt
Obyek sing digunakake pangembang aplikasi kanggo nggawe cathetan akuntansi (bagan akun lan ndhaptar akuntansi)

bsl
Mesin eksekusi basa sing dipasang

nuke
implementasine Custom saka allocator memori

dbeng8
File database engine. A engine database server file prasaja adhedhasar ISAM, kang uga kalebu prosesor SQL prasaja

wbase
Ngandhut kelas dhasar lan fungsi kanggo ngleksanakake antarmuka panganggo Windows - kelas jendhela, akses GDI, lsp.

Dibagi dadi pirang-pirang komponen migunani saka sawetara sudut pandang:

  • Pemisahan ningkatake desain sing luwih apik, utamane isolasi kode sing luwih apik
  • Saka set komponen sampeyan bisa kanthi fleksibel ngumpulake macem-macem pilihan pangiriman:
    • Contone, instalasi klien tipis bakal ngemot wbase, nanging ora duwe backend
    • nanging ing server wbase, ing nalisir, iku ora bakal
    • opsi loro mesthi bakal ngemot nuke lan bsl

Kabeh komponen sing dibutuhake kanggo pilihan peluncuran iki dimuat nalika program diwiwiti. Iki, utamane, perlu kanggo ndhaptar kelas SCOM, sing bakal dibahas ing ngisor iki.

SKOM

Kanggo dekomposisi ing tingkat sing luwih murah, sistem SCOM digunakake, perpustakaan sing padha karo ideologi karo ATL. Kanggo sing wis ora kerjo karo ATL, kita sedhela dhaftar Kapabilitas utama lan fitur.
Kanggo kelas SCOM sing dirancang khusus:

  • Nyedhiyakake cara pabrik sing ngidini sampeyan nggawe kelas saka komponen liyane sing mung ngerti jenenge (tanpa mbukak implementasine)
  • Nyedhiyakake infrastruktur penunjuk pinter sing ngitung referensi. Umur kelas SCOM ora perlu dipantau kanthi manual
  • Ngidini sampeyan ngerteni apa obyek nindakake antarmuka tartamtu lan kanthi otomatis ngowahi pointer menyang obyek menyang pointer menyang antarmuka
  • Nggawe obyek layanan sing tansah bisa diakses liwat metode get_service, etc.

Contone, sampeyan bisa njlèntrèhaké kelas kanggo maca JSON (contone, JSONStreamReader) ing komponen json.dll.
Kelas lan conto bisa digawe saka komponen liyane; kudu didaftar ing mesin SCOM:

SCOM_CLASS_ENTRY(JSONStreamReader)

Makro iki bakal njlèntrèhaké kelas recorder statis khusus, konstruktor kang bakal disebut nalika komponèn dimuat menyang memori.
Sawise iki, sampeyan bisa nggawe conto ing komponen liyane:

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

Kanggo ndhukung layanan, SCOM nawakake infrastruktur tambahan sing rada rumit. Central kanggo iku konsep proses SCOM, kang serves minangka wadhah kanggo layanan mlaku (i.e., muter peran Service Locator), lan uga ngandhut naleni kanggo sumber daya lokal. Proses SCOM disambungake menyang benang OS. Thanks kanggo iki, ing aplikasi sampeyan bisa nampa layanan kaya iki:

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

Kajaba iku, kanthi ngoper proses logis (SCOM) sing diikat menyang benang, sampeyan bisa entuk aplikasi sing praktis bebas saka sudut pandang ruang informasi, mlaku ing benang sing padha. Iki carane klien tipis kita bisa nganggo database file - ing siji proses OS ana rong proses SCOM, siji digandhengake karo klien, lan liyane karo server. Pendekatan iki ngidini kita nyawiji nulis kode sing bakal bisa digunakake ing database file lokal lan ing versi klien-server "nyata". Rega kanggo keseragaman kuwi nduwur sirah, nanging laku nuduhake yen iku worth iku.

Adhedhasar model komponen SCOM, logika bisnis lan bagean antarmuka 1C: Enterprise dileksanakake.

Antarmuka pangguna

Miturut cara, babagan antarmuka. Kita ora nggunakake kontrol Windows standar; kontrol kita dileksanakake langsung ing API Windows. Kanggo versi Linux, lapisan wis digawe sing bisa digunakake liwat perpustakaan wxWidgets.
Pustaka kontrol ora gumantung ing bagean liyane 1C: Enterprise lan digunakake dening kita ing sawetara keperluan internal cilik liyane.

Sajrone pirang-pirang taun pangembangan 1C: Enterprise, tampilan kontrol wis diganti, nanging owah-owahan serius ing prinsip mung sapisan, ing taun 2009, kanthi rilis versi 8.2 lan munculé "formulir sing dikelola". Saliyane ngganti tampilan, prinsip tata wangun wis owah-owahan dhasar - ana penolakan saka posisi piksel-piksel saka unsur kanggo milih aliran-tata unsur. Kajaba iku, ing model anyar, kontrol ora bisa langsung karo obyek domain, nanging karo DTO khusus (Obyek Transfer Data).
Owah-owahan kasebut ndadekake bisa nggawe klien web 1C: Enterprise sing niru logika C++ saka kontrol JavaScript. Kita nyoba njaga kesetaraan fungsional antarane klien tipis lan web. Ing kasus iki ora bisa, contone, amarga watesan saka JavaScript API kasedhiya (contone, kemampuan kanggo nggarap file banget winates), kita asring ngleksanakake fungsi perlu nggunakake ekstensi browser ditulis ing C ++. Saiki kita ndhukung Internet Explorer lan Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows lan Linux) lan Safari (MacOS).

Kajaba iku, teknologi formulir sing dikelola digunakake kanggo nggawe antarmuka kanggo aplikasi seluler ing platform 1C. Ing piranti seluler, rendering kontrol dileksanakake nggunakake teknologi asli saka sistem operasi, nanging kanggo logika tata letak wangun lan respon antarmuka, kode padha digunakake ing "gedhe" 1C: platform Enterprise.

Platform "1C: Enterprise" - apa ing hood?
Antarmuka 1C ing OS Linux

Platform "1C: Enterprise" - apa ing hood?
Antarmuka 1C ing piranti seluler

1C antarmuka ing platform liyane Platform "1C: Enterprise" - apa ing hood?
Antarmuka 1C ing OS Windows

Platform "1C: Enterprise" - apa ing hood?
Antarmuka 1C - klien web

Open source

Sanajan kita ora nggunakake perpustakaan standar kanggo pangembang C ++ ing Windows (MFC, kontrol saka WinAPI), kita ora nulis kabeh komponen dhewe. Perpustakaan wis kasebut wxWidgets, lan kita uga nggunakake:

  • nggulung kanggo nggarap HTTP lan FTP.
  • openSSL kanggo nggarap kriptografi lan nggawe sambungan TLS
  • libxml2 lan libxslt kanggo parsing XML
  • libetpan kanggo nggarap protokol surat (POP3, SMTP, IMAP)
  • niru kanggo ngurai pesen email
  • sqllite kanggo nyimpen log pangguna
  • ICU kanggo internasionalisasi

Daftar terus.
Kajaba iku, kita nggunakake versi sing diowahi banget Tes Google и Google Mock nalika ngembangake tes unit.
Pustaka mbutuhake adaptasi supaya kompatibel karo model organisasi komponen SCOM.
Prevalensi 1C ndadekake platform kasebut minangka tes kekuatan sing apik kanggo perpustakaan sing digunakake. Macem-macem pangguna lan skenario kanthi cepet mbukak kesalahan ing wilayah kode sing paling jarang digunakake. Kita mbenerake dhewe lan nyoba menehi bali menyang penulis perpustakaan. Pengalaman interaksi pranyata beda banget.
Pengembang nggulung и libetpan nanggapi cepet kanggo narik-panyuwunan, nanging tembelan, contone, ing openSSL We tau ngatur kanggo menehi bali.

kesimpulan

Ing artikel kasebut, kita ndemek sawetara aspek utama pangembangan 1C: platform Enterprise. Ing ruang lingkup artikel sing winates, mung sawetara aspek sing menarik, miturut pendapat kita.
Katrangan umum babagan macem-macem mekanisme platform bisa ditemokake kene.
Topik apa sing bakal dadi kapentingan kanggo sampeyan ing artikel sabanjure?

Kepiye platform seluler 1C ditindakake?
Deskripsi struktur internal klien web?
Utawa mungkin sampeyan kasengsem ing proses milih fitur kanggo rilis anyar, ngembangake lan nguji?

Tulis ing komentar!

Source: www.habr.com

Add a comment