oferă dezvoltatorului o libertate aproape nelimitată în legarea obiectelor. Acesta este un mecanism fundamental nou, care, în principiu, nu este complicat. Cred că majoritatea programatorilor de clasă Delphi nu au dificultăți în utilizarea unor pachete de componente inițial destul de complexe, cum ar fi "Connection-DataSet-DataSource-DBAwareComponents". Aceste link-uri sunt create atât în timpul run-time cât și în timpul design-ului, iar utilizarea eficientă a legăturilor direcționale necesită și o anumită experiență.
Aproape aceeași situație cu LiveBindings. Șabloanele și legăturile tehnologice create mai târziu vor deschide o nouă lume a conexiunilor libere. Este de dorit, bineînțeles, ca exemplele să nu fie abstracte, ci practic semnificative. Dar mai întâi o teorie abstractă puțin.
este un mecanism pentru asocierea obiectelor / componentelor bazate pe expresii. Nu este nimic fundamental complicat aici. Cum este conexiunea logică între aplicație și baza de date? Bazat pe interogările SQL. Este un fel de „text“ expresia „de lucru off“, care duce la extragerea datelor din baza de date și de a le transfera la cererea, având în vedere faptul că textul este monitorizat în mod explicit (interogare statică în design-timp, o interogare parametrizat, în mod dinamic „cleiurile“ expresia în timpul run-time.
Și este posibil fără limba SQL? Poți, am folosit cu toții componenta TTable o dată. Totul a fost greu setat, iar prelucrarea datelor despre client a fost o secvență de apeluri procedurale. Ar putea funcționa asta? Da. De ce a fost recunoscut ca dominantă abordarea bazată pe SQL? Pentru că este mai flexibil și mai versatil (și multe altele care formează termenul "mai tehnologic"). Nimeni nu ratează acum pe TTable? Ei bine, cu excepția faptului că facem o aplicație desktop explicită cu stocarea locală într-un fișier.
aplicând, în mod clar, un anumit "model" și "interfață" necesită universalizarea legăturilor. Calitatea arhitecturii este adesea măsurată prin "flexibilitatea" ei, iar această flexibilitate este realizată prin legături flexibile. Legăturile ar trebui să fie cel puțin localizate într-un anumit loc în proiect, iar dacă vorbim despre un mediu component, atunci acest lucru ar trebui să se întâmple la nivelul componentelor.
Desigur, de-a lungul anilor pentru a dezvolta obiceiul de a gândi link-uri hard prin compilare directă de link-uri nu permite percepe instantaneu LiveBindings în toată diversitatea sa, atât în ceea ce privește susținerea componentei / clasă, precum și la nivelul combinațiilor disponibile valorilor de proprietate. Prin urmare, hai să rezolvăm o problemă interesantă de prototipare a unei aplicații cu elemente de modelare 3D.
în forma grafică este prezentată în figura de mai jos.
- Un obiect ca parte a unui model care are un număr de proprietăți
- Interfața vizualizării ferestrelor
- Elementul interfeței, proiectat să afecteze obiectul (săgeată roșie - Schimbarea proprietăților)
- Elementul interfeței pentru vizualizarea complexă a obiectului (săgeată verde - Vizualizare)
- Element de interfață pentru vizualizarea / schimbarea proprietății unui obiect
Evident, legăturile indicate de săgeți au o direcționalitate pronunțată. Există un loc pentru LiveBindings? Fără îndoială.
- Pot exista mai multe tipuri de vizualizare complexă (spațială, proiectivă, schematică etc.)
- Elementele de control (efecte asupra proprietăților obiectului) pot varia în funcție de aspectul cerințelor interfeței / clientului
- Un model sub forma unei colecții de obiecte ar trebui să fie ușor de separat de codul de interfață (de exemplu, pentru a folosi nucleul sistemului pentru scopuri pur calculate)
punerea în aplicare
există din nou un fel de unitate de test pentru LiveBindings. Acest mecanism va fi utilizat în mod eficient în acest scop? Cât de dificil este? Și, desigur, vreau să aud câteva recomandări practice.
Într-un fel, a fost o încercare de "intuiție" pentru LiveBindings, pentru că Nu am studiat baza teoretică într-un mod special, bazându-mă pe simțul comun al creatorului și al utilizatorului. Mai ales am fost interesat de capacitatea de a lega obiecte care nu moștenesc TComponent sau TControl. Aproximativ vorbind, descendenții brutali nerezonabili de utilizatori ai TObject. Pentru a vă salva de meditație, privind proprietățile și variantele posibile ale acestora, voi oferi un set de sfaturi practice în contextul proiectului finalizat.
Inițial avem un obiect MySphere. TMySphere, care nu are nimic de-a face cu componenta TSphere pentru vizualizarea sferei 3D. Vom presupune că TMySphere este necesar pentru modelare / calcule și nu știe cum o vizualizează cineva.
Obiectul Sphere1. TSphere este o minge 3D standard. Este păcat că nu are proprietatea LiveBindings, care totuși nu a împiedicat-o să fie folosită pentru a construi legături flexibile (cum ar fi obiectul obișnuit pe care trebuia să-l înșurubeze cu BindScope).
EDX. TEdit este o componentă cu două scopuri, aceasta afișează și afectează proprietatea obiectului (deplasează obiectul spre dreapta, schimbând poziția sa de coordonate X.).
"Butonul" joacă rolul inițiatorului comunicării "într-un mod vechi", afectează obiectul printr-o legătură, adică în mod direct. Adăugat pentru claritate.
MySphere (model) și Sphere1 (vizual) asociate de cuplare unidirecțional, și ca aceste obiecte „Genetica greșit“, pentru implicarea filialei BindScope-2 și au fost utilizate în vizuale LiveBindings lume.
EDX. TEdit - corect, pentru că nu a fost nevoie de BindScope, apare în toate conexiunile cu numele componentei. Conexiunea este bidirecțională.
O serie de sfaturi practice- relație LiveBindings poate fi „auto îndeplinește“ vizual în design-timp, se poate face în întregime în cod, dar nu a fost aplicată o abordare integrată, în care componentele sunt plasate pe forma proprietăților „încărcată“ în design-timp, iar restul a trebuit să termine în run-time ( de fapt, acesta este un stil perfect de lucru în Delphi);
- Odată ce ai prima conexiune, se stabilește imediat în BindingsList adăugat automat; dacă aveți nevoie de încă unul (gol), faceți clic pe BindingsList și faceți New-> BindExpression;
- Două componente pot fi ușor legate, după cum demonstrează numeroasele demo-uri; ele sunt bine tricotate cu butonul drept al mouse-ului în timpul design-ului și selectând New LiveBindings. ;
- Îmbunătățirea legăturilor se face de la "inspectorul de obiect";
- Dacă doriți să asociați un copil "normal" cu TObject, atunci, desigur, în timpul design-ului cu această problemă; Componenta BindScope participă la conexiune, care trăiește vizibil în formular, participă la formarea legăturilor în timpul design-ului și apoi este deja finalizată în timpul run-time;
- Comunicările gestionate (gestionate prin "bătăi") necesită o notificare explicită;
- Conexiunile pot fi de tipul „de control sursă la“, „de la sursa de control-la-“ și „bidirecțional“, care, în principiu, este auto-explicativ (mai ales atunci când se uită la imaginea de mai sus);
- BindingsList - un depozit comun al tuturor legăturilor;
- Uneori este mai bine să nu faceți clic (de exemplu, să apelați) comandantul conexiunii din BindingsList, ci să găsiți linkul dorit în panoul Structură și apoi să-l modificați în "inspectorul de obiecte", astfel încât să fie mai ușor de înțeles.