Tehnologia Com în dezvoltatorul echipei centura este simplă și accesibilă pentru fiecare programator - software

Cuprins

Au trecut mult timp când programul a funcționat pe un singur computer, când un singur modul software a rezolvat toate sarcinile; în mod natural, ele nu erau foarte complexe ... În prezent, tehnologiile de programare se dezvoltă la un ritm atât de rapid încât programele au devenit înghesuite pe un singur computer. Pe de altă parte, este aproape imposibil să ne imaginăm că un programator, chiar și o complexitate medie, a fost creat de un programator, astfel încât sarcinile au devenit mai complexe, astfel încât tehnica pe care sistemele informatice funcționau a devenit mai complicată. De mult timp, suntem obișnuiți cu faptul că programele lucrează în arhitectura "client-server": este imposibil fără aceasta să prezentăm activitatea DBMS (serverul de bază de date) și funcționarea serviciului Internet (servere WEB). Odată cu apariția tehnologiilor și standardelor COM în practica de creare a sistemelor informatice, abilitatea de a construi servere pentru o varietate de aplicații a devenit disponibilă programatorului individual și grupurilor mici de programatori.

Tehnologia COM Centura oferă trei caracteristici principale:

  • Construirea de sisteme software multi-nivel (N-Tier), bazate pe mecanisme de server COM.
  • Conectați obiectele ActiveX și configurați-le.
  • Folosind mecanismele OLE pentru a extinde în mod semnificativ capabilitățile aplicațiilor care vă permit să minimalizați costul dezvoltării sistemelor software, faceți-le mai sofisticate.

Ultimele două posibilități ale COM sunt discutate într-un alt articol - componentele ActiveX în Centura Team Developer: principii și tehnologie de aplicare. Prin urmare, aici ne referim în primul rând la problemele de construire a serverelor COM și a aplicațiilor care interacționează cu acestea.

COM și obiecte COM

Component Object Model (COM) este o specificație (standard) dezvoltată de Microsoft pentru construirea de sisteme software complexe bazate pe un concept orientat pe obiect. Componentele sunt reprezentate de o "cutie neagră", sunt pe deplin suficiente din pozițiile: setări, metode de comportament, proprietăți ale atributelor, sistem de ajutor, manipularea excepțiilor etc. Obiectele COM se integrează fie în aplicații client, fie furnizează prelucrarea acestora la distanță, iar clientul poate să nu știe că procesarea este efectuată pe alte resurse de calcul.

Această abordare oferă procesarea distribuită a datelor, posibilitatea dezvoltării și depanării autonome a unor părți semnificative ale produsului software și un nivel ridicat de interschimbabilitate și modificabilitate a software-ului creat. Astfel, forțe intelectuale semnificative sunt atrase de dezvoltarea practică a fiecărui sistem software, care, în final, asigură dezvoltarea rapidă a tehnologiei informației. Am notat, desigur, că componentele COM dobândesc proprietățile produsului software și, fără îndoială, le vom vedea în curând pe piața produselor noastre software într-o versiune separată și nu numai ca parte a altor produse software. Pe Internet, ele se găsesc deja în număr mare.

Dintre numeroasele avantaje oferite de COM, se pot distinge următoarele avantaje principale ale acestor tehnologii:

  • Posibilități de construire a unei arhitecturi multi-nivel de sisteme software (N-Tier). Cel mai simplu element al unei astfel de arhitecturi este cel de două niveluri: "client-server". Extinderea capacităților clientului, pe care alte programe pot acționa ca un server, puteți construi arhitectura unui sistem software cu orice număr de link-uri (de exemplu, servere de aplicatii, sau aplicatie web). În acest caz, prelucrarea distribuită a datelor poate fi efectuată și datorită protocoalelor universale și în rețele și pe Internet, arhitectura cea mai complexă a sistemelor software. CTD oferă această capacitate pe baza mecanismelor COM.
  • Independența de limbile de programare. Serverele COM și clienții pot fi scrise în diferite limbi, dar interacțiunea dintre ele este furnizată printr-o interfață standardizată. De exemplu, un client poate fi construit pe baza ASP și un server bazat pe CTD.
  • Utilizarea fișierelor binare pentru COM îi permite să sune în mod repetat, să actualizeze versiunile, fără a afecta sistemele care rulează. Întreținerea unor astfel de sisteme este simplificată: este suficient să actualizați componenta COM, iar aplicația va funcționa cu noua interfață și chiar va efectua noi funcții care sunt încapsulate în COM.

Interfețe și CoClass

Pentru a construi un server COM în programul său, trebuie definite două componente: interfața și clasa COM a obiectului - CoClass. Interfața conține funcționalitatea serverului, adică setul de funcții și setul de date COM. Printre aceste date se pot aloca variabile obiecte create (variabile de obiect) și variabile comune pentru toate obiectele (variabile de clasă). Acestea din urmă sunt, de fapt, variabile de clasă statice. Funcțiile definite în partea de interfață sunt disponibile pentru utilizatorul părții client a aplicației. Datele sunt încapsulate în obiectul care este generat pe server, dar ele sunt accesibile prin funcții de clasă specială pe care utilizatorul le poate descrie. Interfața are un identificator unic global GUID - IID.

Pentru a permite interacțiunea cu nordul, se definește CoClass, care este moștenit de la clasa de interfață. CoClass reprezintă de fapt obiectul de pe server și oferă gestionarea evenimentelor care apar pe server în partea client a aplicației. CoClass are, de asemenea, un GUID-CLSID unic global. Descrierea CoClass corespunde cu partea client a clasei Proxy, care este generată automat. Puteți crea CoClass și cu moștenire multiplă din clasele de interfață, în acest caz, putem obține un server COM combinat. Într-o aplicație server, putem genera un număr arbitrar de clase de interfețe și clase de obiecte COM.

Pentru a unifica descrierea Interfeței și CoClass-urilor în CTD, sunt furnizate mecanisme de indiciu special și un expert (Wizadr). Setările variabilelor de clasă, variabilele de obiecte și metodele de clasă sunt automatizate. Nu este exclusă posibilitatea de a codifica manual textul în OUTLINE.

Construirea de servere COM și caracteristicile acestora

Următorul este un fragment al ferestrei designerului CTD atunci când creați o clasă de interfață pentru cel mai simplu exemplu de aplicație. Acest server COM adaugă două numere întregi.


Fig. 1 Descrierea clasei de interfață pentru serverul COM.

Clasa de interfață este numită IISerge, conține un GUID generat automat (puteți defini propriul dvs.) și o descriere a funcțiilor, dintre care una (summa) efectuează sumarea directă a doi parametri întregi. Când suma este completă, evenimentul evEndSum este declanșat în aplicația client (vezi procesarea de mai jos). În plus, clasa de interfață definește: o variabilă de clasă - nServerContact, care stochează numărul de clienți conectați și o variabilă de obiect - nSumm, care conține valoarea sumei.

Următoarea figură descrie CoClass moștenit de la clasa de interfață. În această descriere, nu este generat sau definit GUID - CLSID și o descriere a evenimentelor care vor fi testate la client: evEndCum și evEndObj. Aceste evenimente sunt inițiate în interiorul metodelor funcționale de clasă de interfață și, prin urmare, din cauza moștenirii și CoClass.


Fig. 2 O descriere a clasei ISerge și evenimentele evEndCum și evEndObj din ea.

La crearea evenimentelor, ei, ca și metodele, li se atribuie automat un număr special de expediere (număr de expediere). După descrierea metodelor, variabilelor și evenimentelor, serverul COM este pregătit pentru compilare.

Înregistrarea, compilarea și depanarea

Compilarea și crearea unui modul executabil pentru serverul COM se realizează în mod obișnuit, cu câteva excepții. La generarea COM, trebuie să specificați tipul de server. Există trei opțiuni:

  • COM este creat ca un DLL pentru partajarea în proces.
  • COM este creat ca EXE pentru uz local ca proces (out-of-process)
  • COM este creat ca EXE pentru utilizarea în rețea utilizând MST (Microsoft Transaction Server).

Aceste moduri sunt setate în fereastra Mod build. După crearea cu succes server, trebuie să vă înregistrați, iar dacă se efectuează modificările și generate automat GUID pentru clase și interfețe, este necesar să se efectueze o re-înregistrare și re-compila aplicația client. Pentru serverul COM, este specificat un identificator universal, numit identificatori unițional universal (UUID). După toate aceste operații, serverul COM este pregătit pentru funcționare. Puteți rula sub CTD sau off-line. În cel de-al doilea caz, trebuie să specificați un parametru care să specifice numărul de utilizatori. Pentru a depana un server, este obositor să creați o aplicație client și să o rulați autonom.

Construirea aplicațiilor client și a caracteristicilor acestora

Pentru a construi o aplicație client, trebuie să generați o interfață APL. Generarea este realizată cu ajutorul utilitarului Exprorer CTD - built-in. Lucrul detaliat cu acesta este descris într-un alt articol (Centura Team Developer - componente ActiveX: principii și tehnologie de aplicare), deci nu vom mai rezista aici. Observ doar că generarea se bazează pe alegerea bibliotecii de tip (* .tlb), care este generată automat în legătură cu crearea executabilului serverului COM și este plasată în același director. După selectarea bibliotecii de tip adecvate pentru generare, este necesar să se efectueze o generație completă de toate clasele, evenimentele și enumerările. În aplicația client nou creată, această APL trebuie adăugată la secțiunea bibliotecă. Figura de mai jos prezintă fereastra celei mai simple aplicații client creată pentru a ilustra principalele prevederi ale COM. Acest program adaugă două numere întregi la serverul COM introduse în câmpurile de formular.


Fig. 3 Un exemplu de aplicație client sumarizată pe un server.

În afară de butonul de sumare din fereastra aplicației, se afișează variabila de clasă, variabila de obiect și numărul de utilizatori conectați. Când faceți clic pe butoanele aplicației, se apelează funcțiile serverului COM, rezultatele lucrărilor sunt afișate în câmpurile corespunzătoare. Figura de mai sus arată munca unui utilizator. Figura următoare prezintă activitatea a două aplicații client. În acest caz, vedem că variabilele generale ale clasei (Numărul de utilizatori și variabila de clasă) sunt aceleași și variabilele de obiecte sunt diferite.


Fig. 4 Două aplicații client care lucrează cu serverul.

Luați în considerare acum caracteristicile de a construi aplicații client bazate pe tehnologia COM. După conectarea APL, pentru acest server COM se adaugă clase la secțiunea de clasă care corespund descrierilor obiectelor serverului. Acestea sunt următoarele clase: clasa funcțională - samplCom_IISerge pentru crearea unei interfețe (funcția de apel) și clasa Com Proxy - samplCom_Iserge pentru procesarea evenimentelor. Clasele sunt vizibile în partea stângă a ferestrei proiectantului CTD din figura de mai jos.


Fig. 5 clase COM și manipularea evenimentelor în evEndSumm în programul client.

Dacă trebuie să definiți dispozitive de tratare a evenimentelor, trebuie să creați un moștenitor de clasă Com Proxy și să creați un obiect accesibil din această clasă. Figura arată o nouă clasă App_Serge, care asigură procesarea evenimentului evEndSumm. Figura de mai jos prezintă rezultatele generării clasei de interfață. Având în vedere lista de metode funcționale disponibile (în partea stângă a ferestrei) și funcția de sumare sumă (în partea dreaptă a ferestrei) este extinsă.


Fig. 6 Clasa de interfață este samplCom_IISerge și metoda summa.

După cum puteți vedea din exemplu, înainte ca metoda să fie apelată utilizând funcția universală INVOKE, parametrii transferați sunt plasați pe stivă (PushNumber), iar după executarea funcției, aceștia sunt chemați din stiva (PopNumber). Stivă este apoi șters (FlushArgs). Această funcție (summa) este generată automat utilizând AX Explorer, iar această legare se numește statică. Cu toate acestea, prin crearea de clase și obiecte necesare, utilizatorul poate însuși în dinamică să efectueze funcționarea funcțiilor de apelare. În acest caz, puteți oferi și o legătură dinamică. Pentru legarea dinamică, poate fi utilizată o variabilă de tip VARIANT, care vă permite să apelați funcții independent de tipurile de parametri.

Variabile de clasă și obiect, depanare COM

În serverul COM, după cum am menționat deja, variabilele de clasă și variabilele de obiect pot fi furnizate. Obiect variabile sunt date individuale ascunse, care sunt accesate prin funcții-metode. Variabilele de clasă (variabilele statice) sunt comune tuturor obiectelor din clasă și se păstrează valorile acestora în timp ce serverul rulează. Aceste variabile pot fi accesate prin intermediul metodelor funcționale. În plus, variabilele comune pot fi declarate în aplicația CTD, care poate fi comună pentru un grup de servere COM. Aceste variabile sunt descrise în partea globală a cererii. Figura de mai jos prezintă fragmentul aplicației client în care sunt numite funcțiile COM și, în special, funcțiile de accesare a variabilelor de clasă și a variabilelor de obiect.

În principiu, pe partea serverului COM nu este necesar să se declare o descriere a ferestrelor de interfață. Cu toate acestea, atunci când depanem un server, pot fi necesare astfel de ferestre. În acest caz, putem descrie ferestrele și le putem folosi atunci când depanem aplicațiile server, împreună cu aplicațiile client. Dacă aveți suficiente resurse de computer, aveți posibilitatea să executați două versiuni ale CTD și să efectuați depanări simultane ale aplicației client și ale programului server COM.


Fig. 7 Apelați summa, GetObjVar, GetClassVar și GetCountUser în programul.

Dacă vrem să izolăm obiecte unele de altele, CTD oferă posibilitatea de a construi un server COM bazat pe tehnologii Tread. Pentru a face acest lucru, este suficient să specificați un mod special la generarea unui server COM. În acest caz, sunt posibile diferite setări, în funcție de utilizarea serverului în modul local sau de la distanță.

Pentru lucrul convenabil în serverul COM în CTD, este posibilă crearea de clase și obiecte de tipul colecției. Colecțiile pot fi folosite pentru a stoca constante enumerate (enum) sau pentru a stoca eșantioane (de exemplu, dicționare listă). Metodele din această clasă, posibilitățile de reglare sunt definite. Clasele de colectare pot fi folosite pentru a moșteni alte clase și pentru a fi incluse în partea de interfață a obiectului. Lucrul cu colecțiile este descris în detaliu în documentație, exemple speciale care folosesc colecțiile sunt incluse în biblioteca de exemple.

Utilizând clase WEB speciale (Centura WEB Extention) sunt construite aplicații COM pentru a lucra sub WEB. Aceste aplicații oferă acces rapid la baza de date, funcționează în cadrul aplicației WEB Application manager. Procesul de construire a aplicațiilor client și server în multe privințe repetă procesul de construire a aplicațiilor convenționale, caracteristicile acestuia fiind detaliate în documentația pentru CTD. Biblioteca de mostre include o aplicație specială COM care oferă comutarea automată a modurilor de funcționare pentru funcționarea în modul WEB și în modul normal.

Observ că în cadrul acestui articol este dificil să se acopere toate problemele și problemele legate de utilizarea tehnologiilor COM. Cu toate acestea, cred că aceste informații vor fi utile dezvoltatorilor de sisteme complexe de informare pentru a determina strategia pentru construcția lor și alegerea mijloacelor de implementare. În opinia mea, opțiunea oferită în CTD este atât simplă, cât și oferă un nivel înalt de profesionalism în programare.