Platfòm "1C: Enterprise" - ki sa ki anba kapo a?

Hey Habr!
Nan atik sa a nou pral kòmanse istwa a sou ki jan li fonksyone andedan platfòm "1C: Enterprise 8" ak ki teknoloji yo itilize nan devlopman li.

Platfòm "1C: Enterprise" - ki sa ki anba kapo a?

Poukisa nou panse sa a enteresan? Premyèman, paske platfòm 1C: Enterprise 8 la se yon gwo (plis pase 10 milyon liy kòd) aplikasyon nan C++ (kliyan, sèvè, elatriye), JavaScript (kliyan entènèt), epi, pi resamman, Epi. Java. Gwo pwojè yo ka enteresan omwen akòz echèl yo, paske pwoblèm ki envizib nan yon baz kòd ti leve nan tout fòs nan pwojè sa yo. Dezyèmman, "1C:Enterprise" se yon pwodwi ki ka repwodwi, "nan bwat", e gen anpil atik sou devlopman sa yo sou Habré. Li la tou toujou enteresan yo konnen ki jan lavi se nan lòt ekip ak konpayi yo.

Se konsa, ann kòmanse. Nan atik sa a nou pral bay yon apèsi sou kèk nan teknoloji yo ki te itilize nan platfòm la ak deskripsyon jaden flè a, san yo pa plonje pwofondman nan aplikasyon an. Vreman vre, pou anpil mekanis, yon istwa detaye ta mande yon atik separe, ak pou kèk, yon liv antye!
Pou kòmanse, li vo deside sou bagay debaz yo - ki sa platfòm la 1C: Enterprise ak ki eleman li konsiste. Repons kesyon sa a se pa tèlman senp, paske tèm "Platfòm" (pou konsizyon, nou pral rele li konsa) refere a yon mwayen pou devlope aplikasyon pou biznis, yon anviwònman ègzekutabl, ak zouti administrasyon. Konpozan sa yo ka apeprè distenge:

  • gwoup sèvè
  • "mens" kliyan ki kapab konekte nan sèvè a atravè http ak pwòp pwotokòl binè li yo
  • kliyan pou travay nan yon achitekti de-niveau ak yon baz done ki sitiye sou yon kondwi difisil oswa katab rezo
  • kliyan entènèt
  • zouti administrasyon sèvè aplikasyon an
  • anviwònman devlopman (ke yo rekonèt kòm Configurator)
  • anviwònman ègzekutabl pou iOS, Android ak Windows Phone (platfòm mobil 1C)

Tout pati sa yo, eksepte kliyan entènèt la, yo ekri nan C++. Anplis de sa, gen dènye a te anonse Konfigirasyon nouvo jenerasyon, ekri an Java.

Aplikasyon natif natal

C++03 yo itilize pou devlope aplikasyon natif natal. Pou Windows, Microsoft Visual C++ 12 (yon pwofil konpatib ak Windows XP) yo itilize kòm yon du, ak pou Linux ak Android - gcc 4.8, pou iOS - clang 5.0. Bibliyotèk estanda yo itilize a se menm bagay la pou tout sistèm opere ak konpilateur - STLPort. Solisyon sa a diminye chans pou erè espesifik aplikasyon STL. Kounye a nou ap planifye pou emigre nan aplikasyon STL ki te voye ak CLang, paske STLPort te sispann epi li pa konpatib ak mòd C++11 ki pèmèt gcc la.
Baz kòd sèvè a se 99% komen, kliyan an - 95%. Anplis, menm platfòm mobil lan sèvi ak menm kòd C++ ak "gwo" a, byenke pousantaj inifikasyon gen yon ti jan pi ba.
Tankou pifò itilizatè C++, nou pa fè reklamasyon nou sèvi ak 100% kapasite lang nan ak bibliyotèk li yo. Se konsa, nou pratikman pa sèvi ak Boost, ak youn nan karakteristik lang yo se depoze kalite dinamik. An menm tan an, nou aktivman itilize:

  • STL (espesyalman fisèl, resipyan ak algoritm)
  • eritaj miltip, enkli. miltip eritaj aplikasyon
  • modèl
  • eksepsyon
  • konsèy entelijan (aplikasyon koutim)

Lè w sèvi ak eritaj miltip nan koòdone (klas konplètman abstrè), yon modèl eleman vin posib, ki pral diskite anba a.

Eleman

Pou asire modilarite, tout fonksyonalite divize an eleman, ki se bibliyotèk dinamik (*.dll pou Windows, *.so pou Linux). Gen plis pase san senkant eleman an total; isit la se deskripsyon kèk nan yo:

entèfas
Gen motè metadata platfòm la

akkont
Objè ke devlopè aplikasyon yo itilize pou konstwi dosye kontablite (tablo kont ak rejis kontablite)

BSL
Embedded langaj ekzekisyon motè

nuk
Custom aplikasyon nan alokasyon memwa

dbeng8
Motè baz done dosye. Yon senp motè baz done sèvè dosye ki baze sou ISAM, ki gen ladan tou yon senp processeur SQL

wbase
Gen klas de baz yo ak fonksyon pou aplike koòdone itilizatè Windows - klas fenèt, aksè GDI, elatriye.

Divize an plizyè eleman itil nan plizyè pwen de vi:

  • Separasyon ankouraje pi bon konsepsyon, an patikilye pi bon izolasyon kòd
  • Soti nan yon seri konpozan ou ka rasanble yon fason fleksib diferan opsyon livrezon:
    • Pou egzanp, yon enstalasyon kliyan mens pral gen wbase, men li pa pral gen backend
    • men sou sèvè wbase a, okontrè, li pa pral
    • tou de opsyon pral nan kou gen nuke ak bsl

Tout eleman ki nesesè pou opsyon lansman sa a chaje lè pwogram nan kòmanse. Sa a, an patikilye, nesesè pou enskri nan klas SCOM, ki pral diskite anba a.

SCOM

Pou dekonpozisyon nan yon nivo pi ba yo, yo itilize sistèm SCOM, yon bibliyotèk ki sanble nan ideoloji ak ATL. Pou moun ki pa te travay ak ATL, nou yon ti tan lis kapasite prensipal yo ak karakteristik yo.
Pou yon klas SCOM ki fèt espesyalman:

  • Bay metòd faktori ki pèmèt ou kreye yon klas ki soti nan yon lòt eleman konnen sèlman non li (san revele aplikasyon an)
  • Bay yon enfrastrikti pointeur entelijan pou konte referans. Tout lavi klas SCOM pa bezwen kontwole manyèlman
  • Pèmèt ou konnen si yon objè aplike yon koòdone espesifik epi otomatikman konvèti yon konsèy sou objè a nan yon konsèy sou koòdone a.
  • Kreye yon objè sèvis ki toujou aksesib atravè metòd get_service, elatriye.

Pou egzanp, ou ka dekri yon klas pou li JSON (pa egzanp, JSONStreamReader) nan eleman json.dll la.
Klas ak enstans yo ka kreye nan lòt konpozan; yo bezwen anrejistre nan machin SCOM la:

SCOM_CLASS_ENTRY(JSONStreamReader)

Makro sa a pral dekri yon klas espesyal achiv estatik, yo pral rele konstrukteur a lè eleman an chaje nan memwa.
Apre sa, ou ka kreye yon egzanp nan yon lòt eleman:

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

Pou sipòte sèvis yo, SCOM ofri yon enfrastrikti adisyonèl, olye konplèks. Santral nan li se konsèp nan yon pwosesis SCOM, ki sèvi kòm yon veso pou kouri sèvis (sa vle di, jwe wòl nan yon Lokatè Sèvis), epi li gen tou yon obligatwa nan resous lokalize. Pwosesis SCOM la mare ak fil OS la. Mèsi a sa a, andedan aplikasyon an ou ka resevwa sèvis tankou sa a:

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

Anplis, lè w chanje pwosesis lojik (SCOM) ki mare nan yon fil, ou ka jwenn aplikasyon ki pratikman endepandan nan pwen de vi espas enfòmasyon an, kouri nan menm fil la. Men ki jan kliyan mens nou an travay ak yon baz done dosye - andedan yon pwosesis OS gen de pwosesis SCOM, youn ki asosye ak kliyan an, ak dezyèm lan ak sèvè a. Apwòch sa a pèmèt nou inifye ekri kòd ki pral travay tou de sou baz done dosye lokal la ak nan vèsyon "reyèl" kliyan-sèvè a. Pri a pou inifòmite sa yo se anlè, men pratik montre ke li vo li.

Ki baze sou modèl eleman SCOM, tou de lojik biznis la ak pati koòdone nan 1C: Enterprise yo aplike.

Koòdone itilizatè

By wout la, sou interfaces. Nou pa sèvi ak kontwòl Windows estanda; kontwòl nou yo aplike dirèkteman sou API Windows la. Pou vèsyon an Linux, yo te fè yon kouch ki travay nan bibliyotèk la wxWidgets.
Bibliyotèk kontwòl la pa depann de lòt pati nan 1C:Enterprise epi nou itilize li nan plizyè lòt ti sèvis piblik entèn yo.

Pandan ane yo nan devlopman nan 1C: Enterprise, aparans nan kontwòl yo te chanje, men yon chanjman grav nan prensip ki te fèt sèlman yon fwa, nan 2009, ak liberasyon an nan vèsyon 8.2 ak avenman nan "fòm jere". Anplis de sa nan chanje aparans la, prensip la nan Layout fòm te fondamantalman chanje - te gen yon rejè nan pixel-pa-pixel pwezante nan eleman an favè koule-Layout nan eleman. Anplis de sa, nan nouvo modèl la, kontwòl pa travay dirèkteman ak objè domèn, men ak DTO espesyal (Objè transfè done).
Chanjman sa yo te fè li posib pou kreye yon kliyan entènèt 1C:Enterprise ki repwodui lojik C++ kontwòl JavaScript yo. Nou eseye kenbe ekivalans fonksyonèl ant kliyan mens ak entènèt. Nan ka kote sa a pa posib, pou egzanp akòz limit nan API JavaScript ki disponib (pa egzanp, kapasite nan travay ak dosye trè limite), nou souvan aplike fonksyonalite ki nesesè yo lè l sèvi avèk ekstansyon navigatè ki ekri nan C++. Kounye a nou sipòte Internet Explorer ak Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows ak Linux) ak Safari (MacOS).

Anplis de sa, yo itilize teknoloji fòm jere pou kreye yon koòdone pou aplikasyon mobil sou platfòm 1C la. Sou aparèy mobil yo, rann kontwòl yo aplike lè l sèvi avèk teknoloji natif natal nan sistèm operasyon an, men pou lojik fòm nan layout ak repons koòdone, yo itilize menm kòd la tankou nan "gwo" platfòm 1C: Enterprise la.

Platfòm "1C: Enterprise" - ki sa ki anba kapo a?
1C koòdone sou OS Linux

Platfòm "1C: Enterprise" - ki sa ki anba kapo a?
1C koòdone sou yon aparèy mobil

1C koòdone sou lòt platfòm Platfòm "1C: Enterprise" - ki sa ki anba kapo a?
1C koòdone sou Windows OS

Platfòm "1C: Enterprise" - ki sa ki anba kapo a?
Entèfas 1C - kliyan entènèt

louvri sous

Malgre ke nou pa sèvi ak bibliyotèk estanda pou devlopè C++ anba Windows (MFC, kontwòl soti nan WinAPI), nou pa ekri tout eleman tèt nou. Bibliyotèk la deja mansyone wxWidgets, epi nou itilize tou:

  • cURL pou travay ak HTTP ak FTP.
  • Opansl pou travay ak kriptografik ak etabli koneksyon TLS
  • libxml2 ak libxslt pou analiz XML
  • libetpan pou travay ak pwotokòl lapòs (POP3, SMTP, IMAP)
  • mimetik analize mesaj imel yo
  • sqllite pou estoke mòso bwa itilizatè yo
  • ICU pou entènasyonalizasyon

Lis la kontinye.
Anplis de sa, nou itilize yon vèsyon trè modifye Tès Google и Google Mock lè w ap devlope tès inite yo.
Bibliyotèk yo te mande adaptasyon pou yo ka konpatib ak modèl òganizasyon eleman SCOM la.
Prévalence de 1C fè platfòm la yon tès ekselan nan fòs pou bibliyotèk yo itilize nan li. Yon varyete itilizatè yo ak senaryo byen vit revele erè nan menm zòn ki pi raman itilize nan kòd. Nou korije yo tèt nou epi eseye remèt yo bay otè bibliyotèk yo. Eksperyans nan entèraksyon vire soti yo dwe trè diferan.
Devlopè cURL и libetpan reponn byen vit nan rale-demann, men patch la, pou egzanp, nan Opansl Nou pa janm rive remèt li.

Konklizyon

Nan atik la nou manyen plizyè aspè prensipal nan devlopman 1C: Enterprise platfòm la. Nan sijè ki abòde lan atik la limite, nou te manyen sèlman kèk aspè enteresan, nan opinyon nou.
Ou ka jwenn yon deskripsyon jeneral sou divès mekanis platfòm yo isit la.
Ki sijè ki ta enterese w nan pwochen atik?

Ki jan platfòm mobil 1C aplike?
Deskripsyon nan estrikti a entèn nan kliyan an entènèt?
Oswa petèt ou enterese nan pwosesis la nan chwazi karakteristik pou nouvo degaje, devlope ak tès?

Ekri nan kòmantè yo!

Sous: www.habr.com

Add nouvo kòmantè