ప్లాట్‌ఫారమ్ "1C: Enterprise" - హుడ్ కింద ఏమి ఉంది?

హే హబ్ర్!
ఈ వ్యాసంలో ఇది లోపల ఎలా పనిచేస్తుందనే దాని గురించి కథను ప్రారంభిస్తాము ప్లాట్‌ఫారమ్ "1C: Enterprise 8" మరియు దాని అభివృద్ధిలో ఏ సాంకేతికతలు ఉపయోగించబడుతున్నాయి.

ప్లాట్‌ఫారమ్ "1C: Enterprise" - హుడ్ కింద ఏమి ఉంది?

ఇది ఆసక్తికరంగా ఉందని మనం ఎందుకు అనుకుంటున్నాము? ముందుగా, 1C: Enterprise 8 ప్లాట్‌ఫారమ్ అనేది C++ (క్లయింట్, సర్వర్, మొదలైనవి), JavaScript (వెబ్ క్లయింట్) మరియు ఇటీవలి కాలంలో, మరియు జావా. పెద్ద ప్రాజెక్టులు కనీసం వాటి స్థాయి కారణంగా ఆసక్తికరంగా ఉంటాయి, ఎందుకంటే చిన్న కోడ్ బేస్‌లో కనిపించని సమస్యలు అటువంటి ప్రాజెక్ట్‌లలో పూర్తి శక్తితో ఉత్పన్నమవుతాయి. రెండవది, “1C:Enterprise” అనేది ప్రతిరూపమైన, “బాక్స్డ్” ఉత్పత్తి, మరియు Habréలో ఇటువంటి పరిణామాల గురించి చాలా తక్కువ కథనాలు ఉన్నాయి. ఇతర జట్లు మరియు కంపెనీలలో జీవితం ఎలా ఉంటుందో తెలుసుకోవడం కూడా ఎల్లప్పుడూ ఆసక్తికరంగా ఉంటుంది.

కాబట్టి ప్రారంభిద్దాం. ఈ కథనంలో మేము ప్లాట్‌ఫారమ్‌లో ఉపయోగించే కొన్ని సాంకేతికతల యొక్క అవలోకనాన్ని ఇస్తాము మరియు అమలులోకి లోతుగా డైవింగ్ చేయకుండా ప్రకృతి దృశ్యాన్ని వివరిస్తాము. నిజానికి, అనేక మెకానిజమ్‌ల కోసం, వివరణాత్మక కథనానికి ప్రత్యేక కథనం మరియు కొన్నింటికి మొత్తం పుస్తకం అవసరం!
ప్రారంభించడానికి, ప్రాథమిక విషయాలపై నిర్ణయం తీసుకోవడం విలువ - 1C: Enterprise ప్లాట్‌ఫారమ్ అంటే ఏమిటి మరియు అది ఏ భాగాలను కలిగి ఉంటుంది. ఈ ప్రశ్నకు సమాధానం అంత సులభం కాదు, ఎందుకంటే "ప్లాట్‌ఫారమ్" (క్లుప్తత కోసం, మేము దానిని అలా పిలుస్తాము) అనే పదం వ్యాపార అనువర్తనాలు, రన్‌టైమ్ వాతావరణం మరియు పరిపాలనా సాధనాలను అభివృద్ధి చేయడానికి ఒక సాధనాన్ని సూచిస్తుంది. కింది భాగాలను సుమారుగా వేరు చేయవచ్చు:

  • సర్వర్ క్లస్టర్
  • http మరియు దాని స్వంత బైనరీ ప్రోటోకాల్ ద్వారా సర్వర్‌కు కనెక్ట్ చేయగల “సన్నని” క్లయింట్
  • హార్డ్ డ్రైవ్ లేదా నెట్‌వర్క్ ఫోల్డర్‌లో ఉన్న డేటాబేస్‌తో టూ-టైర్ ఆర్కిటెక్చర్‌లో పని చేయడానికి క్లయింట్
  • వెబ్ క్లయింట్
  • అప్లికేషన్ సర్వర్ అడ్మినిస్ట్రేషన్ టూల్స్
  • అభివృద్ధి పర్యావరణం (కాన్ఫిగరేటర్ అని పిలుస్తారు)
  • iOS, Android మరియు Windows ఫోన్ కోసం రన్‌టైమ్ వాతావరణం (మొబైల్ ప్లాట్‌ఫారమ్ 1C)

ఈ భాగాలన్నీ, వెబ్ క్లయింట్ మినహా, C++లో వ్రాయబడ్డాయి. అదనంగా, ఇటీవల ప్రకటించబడింది కొత్త తరం కాన్ఫిగరేటర్, జావాలో వ్రాయబడింది.

స్థానిక యాప్‌లు

స్థానిక అనువర్తనాలను అభివృద్ధి చేయడానికి C++03 ఉపయోగించబడుతుంది. Windows కోసం, Microsoft Visual C++ 12 (Windows XPకి అనుకూలమైన ప్రొఫైల్) కంపైలర్‌గా ఉపయోగించబడుతుంది మరియు Linux మరియు Android కోసం - gcc 4.8, iOS కోసం - క్లాంగ్ 5.0. ఉపయోగించిన ప్రామాణిక లైబ్రరీ అన్ని ఆపరేటింగ్ సిస్టమ్‌లు మరియు కంపైలర్‌లకు ఒకే విధంగా ఉంటుంది - STLPort. ఈ పరిష్కారం STL అమలు-నిర్దిష్ట లోపాల సంభావ్యతను తగ్గిస్తుంది. STLPort నిలిపివేయబడినందున మరియు gcc యొక్క C++11 ప్రారంభించబడిన మోడ్‌కు అనుకూలంగా లేనందున, మేము ప్రస్తుతం CLangతో రవాణా చేయబడిన STL అమలుకు మారాలని ప్లాన్ చేస్తున్నాము.
సర్వర్ కోడ్ బేస్ 99% సాధారణం, క్లయింట్ - 95%. అంతేకాకుండా, మొబైల్ ప్లాట్‌ఫారమ్ కూడా అదే C++ కోడ్‌ను "పెద్ద"గా ఉపయోగిస్తుంది, అయినప్పటికీ ఏకీకరణ శాతం కొంత తక్కువగా ఉంది.
చాలా మంది C++ వినియోగదారుల వలె, మేము భాష మరియు దాని లైబ్రరీల యొక్క 100% సామర్థ్యాలను ఉపయోగిస్తామని క్లెయిమ్ చేయము. కాబట్టి, మేము ఆచరణాత్మకంగా బూస్ట్‌ని ఉపయోగించము మరియు భాషా లక్షణాలలో ఒకటి డైనమిక్ టైప్ కాస్టింగ్. అదే సమయంలో, మేము చురుకుగా ఉపయోగిస్తాము:

  • STL (ప్రత్యేకంగా స్ట్రింగ్‌లు, కంటైనర్‌లు మరియు అల్గారిథమ్‌లు)
  • బహుళ వారసత్వం, సహా. బహుళ అమలు వారసత్వం
  • నమూనాలను
  • మినహాయింపులు
  • స్మార్ట్ పాయింటర్లు (అనుకూల అమలు)

ఇంటర్‌ఫేస్‌ల బహుళ వారసత్వాన్ని ఉపయోగించడం ద్వారా (పూర్తిగా వియుక్త తరగతులు), ఒక కాంపోనెంట్ మోడల్ సాధ్యమవుతుంది, ఇది క్రింద చర్చించబడుతుంది.

భాగాలు

మాడ్యులారిటీని నిర్ధారించడానికి, అన్ని కార్యాచరణలు భాగాలుగా విభజించబడ్డాయి, అవి డైనమిక్ లైబ్రరీలు (Windows కోసం *.dll, Linux కోసం *.so). మొత్తం నూట యాభై కంటే ఎక్కువ భాగాలు ఉన్నాయి; వాటిలో కొన్నింటికి సంబంధించిన వివరణలు ఇక్కడ ఉన్నాయి:

బ్యాకెండ్
ప్లాట్‌ఫారమ్ మెటాడేటా ఇంజిన్‌ను కలిగి ఉంటుంది

ఉచ్చారణ
అప్లికేషన్ డెవలపర్‌లు అకౌంటింగ్ రికార్డ్‌లను రూపొందించడానికి ఉపయోగించే వస్తువులు (ఖాతాల చార్ట్‌లు మరియు అకౌంటింగ్ రిజిస్టర్‌లు)

bsl
ఎంబెడెడ్ లాంగ్వేజ్ ఎగ్జిక్యూషన్ ఇంజిన్

nuke
మెమరీ అలోకేటర్ యొక్క అనుకూల అమలు

dbeng8
ఫైల్ డేటాబేస్ ఇంజిన్. ISAM ఆధారంగా ఒక సాధారణ ఫైల్ సర్వర్ డేటాబేస్ ఇంజిన్, ఇందులో సాధారణ SQL ప్రాసెసర్ కూడా ఉంటుంది

wbase
విండోస్ యూజర్ ఇంటర్‌ఫేస్ - విండో క్లాస్‌లు, జిడిఐ యాక్సెస్ మొదలైన వాటిని అమలు చేయడానికి బేస్ క్లాస్‌లు మరియు ఫంక్షన్‌లను కలిగి ఉంటుంది.

బహుళ భాగాలుగా విభజించడం అనేక దృక్కోణాల నుండి ఉపయోగపడుతుంది:

  • విభజన మెరుగైన డిజైన్‌ను ప్రోత్సహిస్తుంది, ప్రత్యేకించి మెరుగైన కోడ్ ఐసోలేషన్
  • భాగాల సమితి నుండి మీరు వివిధ డెలివరీ ఎంపికలను సరళంగా సమీకరించవచ్చు:
    • ఉదాహరణకు, సన్నని క్లయింట్ ఇన్‌స్టాలేషన్‌లో wbase ఉంటుంది, కానీ బ్యాకెండ్ ఉండదు
    • కానీ wbase సర్వర్‌లో, దీనికి విరుద్ధంగా, అది ఉండదు
    • రెండు ఎంపికలు న్యూక్ మరియు బిఎస్ఎల్ కలిగి ఉంటాయి

ప్రోగ్రామ్ ప్రారంభమైనప్పుడు ఈ లాంచ్ ఎంపికకు అవసరమైన అన్ని భాగాలు లోడ్ చేయబడతాయి. SCOM తరగతులను నమోదు చేయడానికి ఇది ప్రత్యేకంగా అవసరం, ఇది క్రింద చర్చించబడుతుంది.

SCOM

దిగువ స్థాయిలో కుళ్ళిపోవడానికి, SCOM వ్యవస్థ ఉపయోగించబడుతుంది, ఇది ATLకి భావజాలంలో సమానమైన లైబ్రరీ. ATLతో పని చేయని వారి కోసం, మేము ప్రధాన సామర్థ్యాలు మరియు లక్షణాలను క్లుప్తంగా జాబితా చేస్తాము.
ప్రత్యేకంగా రూపొందించిన SCOM తరగతి కోసం:

  • మరొక భాగం నుండి తరగతిని దాని పేరు మాత్రమే తెలుసుకొని (అమలును బహిర్గతం చేయకుండా) సృష్టించడానికి మిమ్మల్ని అనుమతించే ఫ్యాక్టరీ పద్ధతులను అందిస్తుంది.
  • రిఫరెన్స్-కౌంటింగ్ స్మార్ట్ పాయింటర్ ఇన్‌ఫ్రాస్ట్రక్చర్‌ను అందిస్తుంది. SCOM తరగతి జీవితకాలం మాన్యువల్‌గా పర్యవేక్షించాల్సిన అవసరం లేదు
  • ఆబ్జెక్ట్ నిర్దిష్ట ఇంటర్‌ఫేస్‌ను అమలు చేస్తుందో లేదో తెలుసుకోవడానికి మిమ్మల్ని అనుమతిస్తుంది మరియు పాయింటర్‌ను ఆబ్జెక్ట్‌కు పాయింటర్‌గా ఇంటర్‌ఫేస్‌కు స్వయంచాలకంగా మారుస్తుంది.
  • get_service పద్ధతి మొదలైన వాటి ద్వారా ఎల్లప్పుడూ ప్రాప్యత చేయగల సేవా వస్తువును సృష్టించండి.

ఉదాహరణకు, మీరు json.dll కాంపోనెంట్‌లో JSON (ఉదాహరణకు, JSONSstreamReader) చదవడానికి ఒక తరగతిని వివరించవచ్చు.
తరగతులు మరియు సందర్భాలు ఇతర భాగాల నుండి సృష్టించబడతాయి; అవి SCOM మెషీన్‌లో నమోదు చేయబడాలి:

SCOM_CLASS_ENTRY(JSONStreamReader)

ఈ స్థూల ప్రత్యేక స్టాటిక్ రికార్డర్ క్లాస్‌ను వివరిస్తుంది, కాంపోనెంట్ మెమరీలోకి లోడ్ అయినప్పుడు దీని కన్స్ట్రక్టర్ అంటారు.
దీని తరువాత, మీరు మరొక భాగంలో దాని ఉదాహరణను సృష్టించవచ్చు:

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

సేవలకు మద్దతు ఇవ్వడానికి, SCOM అదనపు సంక్లిష్టమైన మౌలిక సదుపాయాలను అందిస్తుంది. దానిలో ప్రధానమైనది SCOM ప్రక్రియ యొక్క భావన, ఇది సేవలను అమలు చేయడానికి ఒక కంటైనర్‌గా పనిచేస్తుంది (అనగా, సర్వీస్ లొకేటర్ పాత్రను పోషిస్తుంది), మరియు స్థానికీకరించిన వనరులకు బంధాన్ని కూడా కలిగి ఉంటుంది. SCOM ప్రక్రియ OS థ్రెడ్‌తో ముడిపడి ఉంది. దీనికి ధన్యవాదాలు, అప్లికేషన్ లోపల మీరు ఇలాంటి సేవలను పొందవచ్చు:

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

అంతేకాకుండా, థ్రెడ్‌తో ముడిపడి ఉన్న లాజికల్ (SCOM) ప్రక్రియలను మార్చడం ద్వారా, మీరు అదే థ్రెడ్‌లో నడుస్తున్న సమాచార స్థలం యొక్క కోణం నుండి ఆచరణాత్మకంగా స్వతంత్రంగా ఉండే అప్లికేషన్‌లను పొందవచ్చు. ఫైల్ డేటాబేస్‌తో మా సన్నని క్లయింట్ ఈ విధంగా పనిచేస్తుంది - ఒక OS ప్రాసెస్‌లో రెండు SCOM ప్రాసెస్‌లు ఉన్నాయి, ఒకటి క్లయింట్‌తో అనుబంధించబడి, రెండవది సర్వర్‌తో. స్థానిక ఫైల్ డేటాబేస్ మరియు "నిజమైన" క్లయింట్-సర్వర్ వెర్షన్ రెండింటిలోనూ పని చేసే కోడ్ యొక్క రచనను ఏకీకృతం చేయడానికి ఈ విధానం మాకు అనుమతిస్తుంది. అటువంటి ఏకరూపతకు ధర ఓవర్ హెడ్, కానీ ఆచరణలో అది విలువైనదని చూపిస్తుంది.

SCOM కాంపోనెంట్ మోడల్ ఆధారంగా, బిజినెస్ లాజిక్ మరియు 1C: ఎంటర్‌ప్రైజ్ యొక్క ఇంటర్‌ఫేస్ భాగం రెండూ అమలు చేయబడతాయి.

వినియోగ మార్గము

మార్గం ద్వారా, ఇంటర్ఫేస్ల గురించి. మేము ప్రామాణిక Windows నియంత్రణలను ఉపయోగించము; మా నియంత్రణలు నేరుగా Windows APIలో అమలు చేయబడతాయి. Linux సంస్కరణ కోసం, wxWidgets లైబ్రరీ ద్వారా పనిచేసే ఒక పొర తయారు చేయబడింది.
నియంత్రణల లైబ్రరీ 1C: Enterprise యొక్క ఇతర భాగాలపై ఆధారపడి ఉండదు మరియు అనేక ఇతర చిన్న అంతర్గత వినియోగాలలో మేము ఉపయోగిస్తాము.

1C: Enterprise యొక్క అభివృద్ధి సంవత్సరాలలో, నియంత్రణల రూపాన్ని మార్చారు, అయితే 2009లో వెర్షన్ 8.2 విడుదల మరియు "నిర్వహించబడిన రూపాలు" రావడంతో సూత్రాలలో తీవ్రమైన మార్పు ఒక్కసారి మాత్రమే సంభవించింది. రూపాన్ని మార్చడంతో పాటు, ఫారమ్ లేఅవుట్ యొక్క సూత్రం ప్రాథమికంగా మార్చబడింది - మూలకాల యొక్క ఫ్లో-లేఅవుట్‌కు అనుకూలంగా మూలకాల యొక్క పిక్సెల్-బై-పిక్సెల్ స్థానాలను తిరస్కరించడం జరిగింది. అదనంగా, కొత్త మోడల్‌లో, నియంత్రణలు నేరుగా డొమైన్ వస్తువులతో పని చేయవు, కానీ ప్రత్యేక DTOలతో (డేటా బదిలీ వస్తువులు).
ఈ మార్పులు జావాస్క్రిప్ట్ నియంత్రణల యొక్క C++ లాజిక్‌ను ప్రతిబింబించే 1C:Enterprise వెబ్ క్లయింట్‌ని సృష్టించడం సాధ్యం చేసింది. మేము సన్నని మరియు వెబ్ క్లయింట్‌ల మధ్య క్రియాత్మక సమానత్వాన్ని కొనసాగించడానికి ప్రయత్నిస్తాము. ఇది సాధ్యం కాని సందర్భాల్లో, ఉదాహరణకు అందుబాటులో ఉన్న JavaScript API పరిమితుల కారణంగా (ఉదాహరణకు, ఫైల్‌లతో పని చేసే సామర్థ్యం చాలా పరిమితం), మేము తరచుగా C++లో వ్రాసిన బ్రౌజర్ పొడిగింపులను ఉపయోగించి అవసరమైన కార్యాచరణను అమలు చేస్తాము. మేము ప్రస్తుతం Internet Explorer మరియు Microsoft Edge (Windows), Google Chrome (Windows), Firefox (Windows మరియు Linux) మరియు Safari (MacOS)కి మద్దతు ఇస్తున్నాము.

అదనంగా, 1C ప్లాట్‌ఫారమ్‌లో మొబైల్ అప్లికేషన్‌ల కోసం ఇంటర్‌ఫేస్‌ను రూపొందించడానికి నిర్వహించబడే ఫారమ్‌ల సాంకేతికత ఉపయోగించబడుతుంది. మొబైల్ పరికరాల్లో, నియంత్రణల రెండరింగ్ అనేది ఆపరేటింగ్ సిస్టమ్‌కు చెందిన సాంకేతికతలను ఉపయోగించి అమలు చేయబడుతుంది, అయితే ఫారమ్ లేఅవుట్ లాజిక్ మరియు ఇంటర్‌ఫేస్ ప్రతిస్పందన కోసం, అదే కోడ్ “పెద్ద” 1C:Enterprise ప్లాట్‌ఫారమ్‌లో ఉపయోగించబడుతుంది.

ప్లాట్‌ఫారమ్ "1C: Enterprise" - హుడ్ కింద ఏమి ఉంది?
Linux OSలో 1C ఇంటర్‌ఫేస్

ప్లాట్‌ఫారమ్ "1C: Enterprise" - హుడ్ కింద ఏమి ఉంది?
మొబైల్ పరికరంలో 1C ఇంటర్‌ఫేస్

ఇతర ప్లాట్‌ఫారమ్‌లలో 1C ఇంటర్‌ఫేస్ ప్లాట్‌ఫారమ్ "1C: Enterprise" - హుడ్ కింద ఏమి ఉంది?
Windows OSలో 1C ఇంటర్‌ఫేస్

ప్లాట్‌ఫారమ్ "1C: Enterprise" - హుడ్ కింద ఏమి ఉంది?
ఇంటర్ఫేస్ 1C - వెబ్ క్లయింట్

ఓపెన్ సోర్స్

మేము Windows (MFC, WinAPI నుండి నియంత్రణలు) క్రింద C++ డెవలపర్‌ల కోసం ప్రామాణిక లైబ్రరీలను ఉపయోగించనప్పటికీ, మేము అన్ని భాగాలను స్వయంగా వ్రాయము. లైబ్రరీ గురించి ఇప్పటికే ప్రస్తావించబడింది wxWidgets, మరియు మేము కూడా ఉపయోగిస్తాము:

  • వలయములుగా HTTP మరియు FTPతో పని చేయడం కోసం.
  • OpenSSL క్రిప్టోగ్రఫీతో పని చేయడం మరియు TLS కనెక్షన్‌లను ఏర్పాటు చేయడం కోసం
  • libxml2 మరియు libxslt XML పార్సింగ్ కోసం
  • లిబెట్పాన్ మెయిల్ ప్రోటోకాల్‌లతో పని చేయడం కోసం (POP3, SMTP, IMAP)
  • అనుకరణ ఇమెయిల్ సందేశాలను అన్వయించడానికి
  • sqllite వినియోగదారు లాగ్‌లను నిల్వ చేయడానికి
  • ఐసియు అంతర్జాతీయీకరణ కోసం

జాబితా కొనసాగుతుంది.
అదనంగా, మేము అత్యంత సవరించిన సంస్కరణను ఉపయోగిస్తాము Google పరీక్ష и Google మాక్ యూనిట్ పరీక్షలను అభివృద్ధి చేస్తున్నప్పుడు.
లైబ్రరీలు SCOM కాంపోనెంట్ ఆర్గనైజేషన్ మోడల్‌కు అనుకూలంగా ఉండటానికి అనుసరణ అవసరం.
1C యొక్క ప్రాబల్యం ప్లాట్‌ఫారమ్‌లో ఉపయోగించిన లైబ్రరీలకు బలం యొక్క అద్భుతమైన పరీక్షగా చేస్తుంది. అనేక రకాల వినియోగదారులు మరియు దృశ్యాలు కోడ్ యొక్క అత్యంత అరుదుగా ఉపయోగించే ప్రాంతాలలో కూడా లోపాలను త్వరగా వెల్లడిస్తాయి. మేమే వాటిని సరిచేసి, లైబ్రరీ రచయితలకు తిరిగి ఇవ్వడానికి ప్రయత్నిస్తాము. పరస్పర చర్య యొక్క అనుభవం చాలా భిన్నంగా ఉంటుంది.
డెవలపర్లు వలయములుగా и లిబెట్పాన్ పుల్-రిక్వెస్ట్‌లకు త్వరగా స్పందించండి, అయితే ప్యాచ్, ఉదాహరణకు, ఇన్ OpenSSL మేము దానిని తిరిగి ఇవ్వలేకపోయాము.

తీర్మానం

వ్యాసంలో మేము 1C: Enterprise ప్లాట్‌ఫారమ్ అభివృద్ధి యొక్క అనేక ప్రధాన అంశాలను తాకాము. వ్యాసం యొక్క పరిమిత పరిధిలో, మేము కొన్ని ఆసక్తికరమైన, మా అభిప్రాయం ప్రకారం, అంశాలను మాత్రమే తాకాము.
వివిధ ప్లాట్‌ఫారమ్ మెకానిజమ్‌ల యొక్క సాధారణ వివరణను కనుగొనవచ్చు ఇక్కడ.
భవిష్యత్ కథనాలలో మీకు ఆసక్తి కలిగించే అంశాలు ఏవి?

1C మొబైల్ ప్లాట్‌ఫారమ్ ఎలా అమలు చేయబడింది?
వెబ్ క్లయింట్ యొక్క అంతర్గత నిర్మాణం యొక్క వివరణ?
లేదా కొత్త విడుదలల కోసం ఫీచర్‌లను ఎంచుకోవడం, అభివృద్ధి చేయడం మరియు పరీక్షించడం వంటి వాటిపై మీకు ఆసక్తి ఉందా?

వ్యాఖ్యలలో వ్రాయండి!

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి