Aplicație Web pentru gestionarea trupelor și interpreților muzicali COORDONATOR ȘTIINȚIFIC Lect. Dr. Mihail CHERCIU ABSOLVENT Tudor BARCAN BUCURE ȘTI… [607575]
UNIVERSITATEA DIN BUCURE ȘTI
FACULTATEA DE MATEMATICĂ ȘI INFORMATICĂ
LUCRARE DE LICENȚĂ
COORDONATOR ȘTIINȚIFIC
Lect. Dr. Mihail CHERCIU
ABSOLVENT: [anonimizat]
2018
1
UNIVERSITATEA DIN BUCURE ȘTI
FACULTATEA DE MATEMATICĂ ȘI INFORMATICĂ
Find my band
Aplicație Web pentru gestionarea
trupelor și interpreților muzicali
COORDONATOR ȘTIINȚIFIC
Lect. Dr. Mihail CHERCIU
ABSOLVENT: [anonimizat]
2018
2
Cuprins
Introducere ………………………….. ………………………….. ………………………….. ………………………….. .. 4
1. Tehnologii folosite ………………………….. ………………………….. ………………………….. ……………… 5
1.1 Limbajul C# ………………………….. ………………………….. ………………………….. …………………. 5
1.2 .NET Framework ………………………….. ………………………….. ………………………….. ………….. 6
1.3 ASP.NET MVC ………………………….. ………………………….. ………………………….. ……………. 7
1.4 Entity Framework ………………………….. ………………………….. ………………………….. ……….. 10
1.5 Front -end ………………………….. ………………………….. ………………………….. ……………………. 11
1.5.1 HyperText Markup Language ………………………….. ………………………….. …………….. 11
1.5.2 Cascading Style Sheets ………………………….. ………………………….. ………………………. 12
1.5.3 JavaScript ………………………….. ………………………….. ………………………….. ……………. 13
1.5.4 Jquery ………………………….. ………………………….. ………………………….. …………………. 14
1.5.5 Bootstrap ………………………….. ………………………….. ………………………….. ……………… 14
1.6 SQL Serv er ………………………….. ………………………….. ………………………….. ………………… 15
1.7 Microsoft Visual Studio ………………………….. ………………………….. ………………………….. .. 15
1.8 Design pattern și utilitatea în aplicație ………………………….. ………………………….. ……….. 16
1.8.1 Singleton ………………………….. ………………………….. ………………………….. ……………… 17
1.8.2 Dependency injection si Repository pattern ………………………….. ………………………. 18
1.8.3 Factory pattern ………………………….. ………………………….. ………………………….. ……… 19
2. Descrierea apli cației ………………………….. ………………………….. ………………………….. …………. 21
2.1 Descriere generală ………………………….. ………………………….. ………………………….. ……….. 21
2.2 Scopul aplicatiei ………………………….. ………………………….. ………………………….. ………….. 21
2.3 De talii funcționale ………………………….. ………………………….. ………………………….. ……….. 22
2.4 Schema bazei de date ………………………….. ………………………….. ………………………….. …… 23
2.5 Fluxul de lucru al aplicației ………………………….. ………………………….. ……………………….. 28
2.5.1 Fluxul aplicației pentru un artist ………………………….. ………………………….. ………….. 28
2.5.2 Fluxul aplicației pentru un artist membru într -o formație și a liderilor acestora ….. 29
2.5.3 Fluxul administratorului de aplicație ………………………….. ………………………….. ……. 30
2.6 Aplicații similare ………………………….. ………………………….. ………………………….. …………. 30
3. Dezvoltarea aplicației ………………………….. ………………………….. ………………………….. ……….. 32
3.1 Înregistrarea în aplicație ………………………….. ………………………….. ………………………….. .. 32
3.2 Autorizare în aplicație și logare ………………………….. ………………………….. …………………. 33
3.3 Vizualizarea și editarea profilului personal ………………………….. ………………………….. …. 33
3.4 Căutarea unei trupe în aplicație ………………………….. ………………………….. …………………. 34
3.5 Gestionarea unei trupe în aplicație ………………………….. ………………………….. ……………… 34
3
3.5.1 Crearea unei trupe ………………………….. ………………………….. ………………………….. …. 34
3.5.2 Vizualizarea și editarea profilului unei trupe ………………………….. ……………………. 35
3.6 Vizualizarea aplicărilor curente în aplicație ………………………….. ………………………….. … 37
3.7 Vizualizarea interviului pentru postul liber ………………………….. ………………………….. …. 38
3.8 Grupul cu discuțiile membrilor dintr -o trupă ………………………….. ………………………….. .. 40
3.9 Panoul de administrare ………………………….. ………………………….. ………………………….. …. 41
3.9.1 Administrarea artiștilor în aplicație ………………………….. ………………………….. ……… 41
3.9.2 Administrarea instrumentelor muzicale ………………………….. ………………………….. … 42
3.9.3 Administrarea genurilor muzicale ………………………….. ………………………….. ……….. 42
3.9.4 Administrarea județelor ………………………….. ………………………….. ……………………… 42
3.9.5 Administrarea orașelor ………………………….. ………………………….. ………………………. 42
4. Concluzii ………………………….. ………………………….. ………………………….. …………………………. 44
Bibliografie ………………………….. ………………………….. ………………………….. …………………………. 46
4
Introducere
În ziua de astă zi, tehnologia a acaparat toate segmentele vieții sociale si
aproape orice informație se poate găsi pe I nternet. Cu ajutorul acestui domeniu, multe
dintrea activităț ile unei persoane se pot realiza în mediul online, cum ar fi: găsirea
unui loc de muncă, socializarea cu prietenii ș i multe altele.
În domeniul muzical , am observat c ă tehnologia nu a avansat așa cum ne -am fi
așteptat. În urma acestei concluzii, m -am decis să real izez o aplica ție care, pe de o
parte să poată promova interpreții tineri în scopul găsirii unei formaț ii muzicale
adecvate, iar pe de alta , să permită trupelor muzicale să identifice potențiali soliști și
instrumentiști pentru fiecare post liber .
Pentru promovarea într -o trup ă, cântareț ul va trebui inițial să trimit ă, precu m la
un interviu, interpretarea unei piese muzicale solicitată de către forma ție. Un lider de
trupă va putea observa nivelul cunoașterii muzicale a candidatului care a aplicat pentru
respectivul post, analizând totodată dacă acesta s-ar putea integra în echipă .
Motivul pentru care am realizat aceast ă aplica ție este faptul c ă, acum câțiva ani
am început să î nvăț un instrument muzical, fără însă a reusi să gă sesc o trup ă potrivită .
În România, interviurile pentru ocuparea unui post î ntr-o trup ă încă se
desfășoară pe forumuri ș i grupuri de socializare , în timp ce în restul lumii am găsit
aplicaț ii specializate care grupează anunțurile în funcție de zonă , însă procesul de
recrutare a r ămas acela și.
În acest document voi prezenta trei capitole care cuprind:
• tehnologiile utilizate și cum m -au ajutat la dezvoltarea acestei aplica ții;
• prezentarea propriu -zisă a aplica ției în care voi ar ăta compor tamentul și
funcționalit ățile acesteia ;
• dezvoltarea aplica ției, în care voi descrie cum au fost create cele mai
importante func ționalit ăți.
5
1. Tehnologii folosite
1.1 Limbajul C#
Limbajul de programare C# este un limbaj de programare orientat -obiect care
aduce o abordare nou ă față de predecesorii acestuia, C și C++. Realizat de către
Microsoft în anul 2000 , acest limbaj a venit ca r ăspuns al celebrului limbaj Java ,
având o serie de asem ănări cu acesta în ceea ce prive ște conceptele și domeniile de
utilizare .
Precum în Java și în alte limbaje orientat -obiect, C# utilizeaz ă clase ce con țin
variabile și metode ce descriu ac țiunea variabilelor în cadrul unei aplica ții.
Gestionarea v ariabilel or a fost îmbunătățită în acest limbaj și pot fi utilizate sub formă
de propriet ăți. O proprietat e reprezint ă o variabil ă ce con ține la ini țializare dou ă
metode importante pentru accesarea acesteia:
• get – o metod ă care va returna valoarea variabilei ;
• set – o metod ă care va atribui variabilei o valoare de acelasi tip.
Un exemplu de proprietate ce se regase ște în aplica ție este urm ătorul:
//Se dec lara variabila ContentType de tip string
// si i se vor asocia cele doua metode get si set
public string ContentType { get; set; }
Pentru a evita probleme de securitate în cadrul aplica ției și pentru a nu apela
orice metod ă în orice parte a programului, limbajul a p ăstrat specificatori de acces
precum cei din C++: public, protected, private și internal . Specificatorul public va
permite unei clase să fie apelate din interiorul oric ărei clase ale proiectului,
specificatorul protected are rolul de a permite apelarea clasei respective doar de c ătre o
clasă moștenită din aceasta, specificatorul private va permite unei metode s ă fie
apelate doar în cadrul clasei din care provine, iar ultimul specificator, internal , va
permite accesarea unei metode de c ătre o alt ă clasă ce se afl ă în acela și assembly cu
clasa originar ă metodei.
Procesul de compilare al codului în C# este urm ătorul: se compileaz ă codul
sursă într-un modul, care va fi translatat în cod assembler de ti p Intermediate
Language . Acest cod va fi transformat în cod ma șină și va fi compilat de c ătre Just In
Time Compiler .
6
Printre cele mai importante propriet ăți ale acestui limbaj se pot enumera:
simplitatea și modernitatea, faptul c ă este orientat -obiect, siguran ța tipului și
scalabilitatea. Simplitatea limbajului este dat ă de către recomandarea de a nu folosi
pointeri și faptul c ă nu se mai lucreaz ă în mod direct cu alocarea și dezalocarea
memoriei. C# oferă utilizatorului posibilitatea de a lucra cu acces area pointer -ilor în
proiect și va trebui setat modul unsafe , însă va avea unele limit ări față de cum pot fi
folosi ți în C/C++ . Modernitatea este bazat ă pe puterea de a crea o aplica ție bazată pe
acest limbaj ce poate fi utilizată pe versiuni diferite, făr ă a exista diferențe sau
modificări ulterioare.
C# suport ă conceptele de programare orientat ă pe obiecte: polimorfism,
interfe țe și mo ștenire . Acestea ajut ă enorm de mult la o aplica ție complex ă prin
structurarea eficient ă a claselor și implementarea serviciilor. Fa ță de predecesorul s ău,
C++ , limbajul a eliminat conceptul de mo ștenire multipl ă, astfel încât, o clasă copil
poate mo șteni o singura clasă părinte , putând moșteni mai multe intefe țe.
De asemenea, siguran ța tipului nu îi permite utilizatorul ui să realizeze
schimb ări ale tipului de variabil ă (precum o variabilă definită de tip string să fie
utilizată mai târziu ca o variabilă de tip int și sa îi aplicăm metode specifice unui
număr întreg) , prevenind astfel erori de tip runtime .
Fig. 1: Procesul de compilare al codului C#
Sursa: https://rthumati.files.wordpress.com/2010/05/compiling2.jpg
1.2 .NET Framework
.NET Framework reprezint ă un framework dezvoltat de către Microsoft în anul
2002 care duce la construirea unei aplica ții web, folosindu -se de limbajul de
7
programare C#. Aceast ă arhitectur ă este alc ătuită din trei componente importante :
Common Language Runtime (CLR) , libraria framework -ului și limbajul .
Programele scrise în acest framework sunt executate de c ătre Common
Language Runtime care va genera o ma șină virtual ă a aplica ției ce este capabil ă de
mai multe opera ții ce țin cont de gestionarea funcționării corecte a proiectului precum :
securitatea aplica ției și modul în care este administrat ă și dezalocată memoria. Printre
funcționalit ățile importante ale CLR-ului putem preciza Garbage Collector și tratarea
excep țiilor ce sunt aruncate în timpul rul ării aplica ției, la runtime .
Garbage Collector porne ște o ac țiune de eficientizare a memoriei alocate în
cazul în care s -a atins un anumit prag și va avea în vedere resursele care nu au mai fost
folosite și, astfel, se vor putea dezaloca cu certitudine. În ceea ce prive ște tratarea
excep țiilor, .NET va putea arunca un mesaj de eroare ce con ține ac țiunea care a
provocat aceast ă excep ție și o list ă de fi șiere organizate sub form ă de stivă care
ilustreaz ă întregul parcurs al excep ției ce a declan șat eroarea.
A doua component ă din arhitectura .NET Framework este reprezentat ă de o
bibiliotec ă de clase numit ă Framework Class Library (FCL) . Aceast ă bibliotec ă
cuprinde clase definite de c ătre sistem cu metode ce pot fi apelate în proiect , iar cu
ajutorul bibiliotecii se pot manipula date, fi șiere de tip input și output și multe altele.
Ultima component ă a .NET Framework se bazeaz ă pe limbaje și modul cum
acestea completeaz ă progresul unei aplica ții de la compilator c ătre partea de client a
aplicației . Concepte precum interfa ța pentru utilizator, conexiuni la baza de date,
dezvoltarea aplica țiilor web și cele de tipul Web-forms pot fi implementa te cu ajutorul
acestei tehnologii împreună cu ASP.NET, ADO.NET sau WinForms .
Pentru c ă inițial .NET Framework a fost destinat doar sistemului Microsoft
Windows , în urm ă cu 2 ani, în 2016, a ap ărut un nou framework compact denumit
.NET Core pentru a elimina problema portabilit ății și pentru a -și atrage utilizatori ce
utilizează sistemele cu versiuni de Linux și MacOS .
1.3 ASP.NET MVC
ASP.NET (Active Server Page) a luat na ștere din nevoia de a dezvolta aplica ții
în arhitectur a .NET și a fost lansat ă odată cu sistemul Web Forms în anul 2002 . La
început acesta era destinat dezvolt ării aplica țiilor de tip Web Forms și în perioada
respectiv ă a avut un succes r ăsunător pe pia ța aplica țiilor din întreaga lume.
8
În 2007, aceast ă arhitectur ă a dezvoltat în paralel o nouă platform ă denumit ă
ASP. NET MVC (Model View Controller) datorit ă utiliz ării acestui concept în
dezvoltarea aplica țiilor web ce asigura mai mult ă claritate în cod. Pentru introducerea
acestei platforme în detrimentul aplica țiilor vechi de tip Web-form s, ASP. MVC a
permis utilizarea codului din aplica țiile vechi f ără a produce prea multe modific ări.
Conceptul Model -View -Control ler este alc ătuit din trei componente:
• Modelul p ăstreaz ă informa ții sugestive ce pot fi vizualizate în View și
manipulate de c ătre Controller ;
• Controller -ul creeaz ă sau re încarc ă informa ții în componenta Model și este
singurul care poate schimba starea aplica ției; la final modelul va fi trimis c ătre View ;
• View -ul construie ște interfa ța aplica ției pe baza modelului primit .
Fig. 2 : Arhitectura Model -View -Controller
Sursa: https://docs.znframework.com/mvc -model -view-controller/controllers
Aceast ă separare a conceptelor ajut ă la simplificarea dezvolt ării și structurarea
mult mai logic ă a aplica ției, iar comportamentul ad ăugat de c ătre dezvoltator nu va fi
inclus în interfa ța utilizatorului.
Framework -ul se bazeaz ă pe arhitectura .NET , astfel c ă, pentru defini ția unei
clase de tip controller se va mo șteni clasa Controller furnizat ă de către biblioteca
System.Web.Mvc.
9
O alt ă funcționalitate important ă adusă odată cu acest framework o reprezint ă
personalizarea unui View sau a unui Controller . Aceasta se g ăsește în aplica ția „Find
my band” prin adăugarea unor variabile ce păstrează serviciile disponibile pentru
accesarea informa țiilor din baza de date ș i sesiunea curent ă dintr-o pagin ă. Orice
controller din aplica ție care va return a view-uri și acțiuni trebui e să moșteneasc ă un
controller de baz ă, configurat în felul urm ător:
public class BaseController : Controller
{
// se adauga un singleton de tip
RepositoryFactory care acceseaza
// metode de manipulare a datelor din baza de
date
protected RepositoryFactory Services;
// se adauga un wrapper care va putea administra
informatiile din
// sesiunea pe browser
protected new SessionWrapper Session =
SessionWrapper.Instance;
protected BaseController()
{
this.Services = new RepositoryFactory();
}
}
Pentru toate view-urile din aplica ție am creat un view p ărinte care p ăstreaz ă
doar informa ții din sesiunea cure ntă. În mod normal, aceast ă funcționalitate permite
atribuirea oric ărei propriet ăți de care este nevoie la afi șarea unui view. Următorul cod
moștenește o clasă generic ă din biblioteca System.Web.Mvc , iar orice view îl va
moșteni pe acesta și va fi setat în XML -ul ce ține de configurarea aplica ției:
public abstractclass BaseView <TModel> :
WebViewPage<TModel>
{
protected new SessionWrapper Session =
SessionWrapper.Instance;
}
10
1.4 Entity Framework
Entity Framework este un ORM (object -relational mapping) pentru aplica ții
.NET care creeaz ă o legatur ă între o clas ă din C# și o tabel ă din SQL Server . Aceast ă
tehnologie îi permite programatorului s ă acceseze date dintr -o tabel ă a bazei de date cu
ușurință, iar modific ările în baza de date se vor face direct din aplica ție cu ajutorul
acestui framework.
Sunt dou ă abord ări ce pot fi aplicate la crearea unei aplica ții noi: Database
First și Code First . Prima variant ă este fol osită în cazul în care baza de date este
existent ă, dar se creeaz ă o nou ă aplica ție în jurul ei. Abordarea Code First const ă în
adăugarea unor clase C# ce reprezint ă entitățile în baza de date și translatarea acestora
în baza de date dup ă modelul creat. Pentru aplica ția „Find my band” am utilizat
varianta Code First.
Fiecare tabel ă din baza de date este asociat ă clasei, iar pentru a crea leg ături de
tip Foreign Key sau o cheie primar ă vom aplica clasei C# propriet ăți specifice
tool-ului. Pentru a exemplifica utilitatea acestui utilitar în aplica ția mea, voi reprezenta
codul sc ris pentru a crea dou ă tabele User și UserType și o rela ție de One-To-Many
între cele dou ă tabele.
//Definirea clasei User
public class User
{
public int Id { get; set; }
public UserType UserType { get; set; }
}
//Definirea clasei UserType
public clas s UserType
{
public int Id { get; set; }
public string Name { get; set; }
public List<User> Users { get; set; }
}
//Adaugarea relatiei intre cele doua tabele
this
.HasRequired(ut => ut.UserType)
.WithMany(u => u.Users)
.HasForeignKey(ut => ut.TypeId);
Pentru efectuarea modific ărilor și a păstrării în sincronizare a modelelor din C#
cu baza de date SQL Server, Entity Framework utilizeaz ă migr ări. O migrare
reprezint ă orice modificare a unui tabel sau a unei constr ângeri care trebuie publicat ă
11
în baza de date și pot fi accesate versiuni anterioare în cazul în care modelarea bazei
de date nu a fost reusit ă. Generarea migr ărilor este f ăcută automat de framework și vor
fi create câte o clas ă C# per migrare precum în urm ătoarea imagine:
Fig. 3: P ăstrarea migr ărilor
1.5 Front -end
1.5.1 HyperText Markup Language
HyperText Marku p Language , cunoscut dup ă abrevierea HTML , reprezint ă un
limbaj de marcare ce are rolul de a ilustra informa ții într-o pagin ă web și face parte
din componenta vizuală a unei aplicații . Totalitatea elementelor dintr -o pagin ă
alcătuiesc structura paginii web , care sunt interpretate și afișate de c ătre browser .
Un document HyperText Markup Language trebuie să conțină două zone
importante: head și body . Elementul head conține informa țiile despre titlul paginii și
legături c ătre fi șiere de tip style (Css) sau de tip script (JavaScript) . Al doilea element
cuprinde toate informa țiile care vor fi afi șate de c ătre browser în pagina web și poate
conține o serie de elemente precum: header, paragraf, hyperlink -uri (care ne ajut ă să
navig ăm în aplica ția web ), imagini, tabele.
Pentru aceast ă aplica ție am folosit un framework pentru aplica ție web numit
ASP.NET Razor care curprinde at ât cod HyperText Markup Language , cât și cod C#.
Aceast ă îmbinare este folosit ă pentru arhitectura Model -View -Controller deoarece se
poate trimite un Model cu de date dintr -un Controller direct într-o pagin ă HTML .
Aceast ă pagin ă reprezint ă View -ul în aplica ție și are extensia .cshtml.
Dezvoltat de c ătre Microsoft în 2010, ASP.NET Razor a reprezentat o
schimbare important ă de la vechiul ASP.NET Web Forms și a simplificat componenta
View a arhitecturii Model -View -Controller prin op timizarea s intaxei codului HTML
generat și introducerea IntelliSense (un mecanism de identificare a erorilor în
aplica ție).
12
Fig.4: Exemplu de View creat prin ASP.NET Razor
1.5.2 Cascading Style Sheets
Dacă structura unei pagini web se realizeaz ă în HTML , de stilizarea interfe ței
pentru utilizator se ocup ă Cascading Style Sheets . Acest limbaj a fost construit pentru
a separa con ținutul dintr -o pagin ă web de către des ign-ul aplica ției și datorit ă acesteia,
mai multe pagini web pot avea elemente stilizate aseman ător doar av ând referin țe la
un singur fi șier CSS.
Sintaxa unui stil este u șor de utilizat și cuprinde cuvinte sugestive din limba
englez ă. Cascading Style Sheets se aplic ă unor elemente d e tip HTML care sunt
accesate de c ătre un selector . Acesta stabile ște ce parte a con ținutului va fi supus ă unei
schimb ări de stil și se poate aplica pe fiecare element din pagin ă sau doar pentru o
clasă sau un id specific. O clas ă poate fi atribuit ă mai mu ltor elemente de tip HTML ,
iar un stil aplicat clasei respective va afecta toate elementele ce îi corespund, însă un
id poate fi aplicat unui singur element de tip HTML și stilul se va aplica doar pe
acesta . Dup ă ce am stabilit selectorul, va trebui s ă adăugăm propriet ăți în interiorul
acestuia pentru a ne defini cum va fi înfățișat elementul în pagin ă.
13
1.5.3 JavaScript
JavaScript este un limbaj de script are de tip orientat obiect care este utilizat
pentru modificarea elementelor și adăugarea func ționalit ăților într-o pagin ă web.
Apărut în anul 1995, JavaScript este cel mai utilizat limbaj pe partea de front -end a
unei aplica ții web , prin biblioteci precum Jquery, Angular, Node.Js , React și multe
altele.
Chiar dac ă în prim ă fază ne duce cu g ândul l a limbajul Java , cele dou ă sunt
diferite. JavaScript împreun ă cu CSS și HTML reprezint ă cele trei tehnologii de baz ă
ale World Wide Web -ului, f ără de care o aplica ție web nu ar putea afișa informații în
pagină . Astfel, contribu ția fiec ărui limbaj la o pagin ă web este urm ătoarea:
• HTML – prezentarea con ținutului în pagin ă;
• CSS – stilizarea paginii ;
• JavaScript – definirea compor tamentului unei pagini web.
Fiecare browser conține un arbore de elemente denumit Document Object
Model (DOM) . Acest arbore prezint ă cum sunt structurate elementele într-o pagin ă
web și cum pot fi gestionate cu ușurință de către JavaScript . Datorit ă standardului
W3C , fiecare browser trebuie s ă respecte anumite reguli în ceea ce prive ște defini ția
DOM -ului pentru portabilitatea script -urilor și păstrarea experien ței utilizatorului în
orice browser .
Fig. 5 Structura arborelui de elemente ( Document Object Model )
Sursa: http://www.openbookproject.net /tutorials/getdown/css/lesson4.html
14
1.5.4 Jquery
Jquery este cea mai folosit ă bibliotec ă open -source pentru JavaScript care
aduce programatorului front -end mai multa logic ă și simplitate scrierii de cod pentru
comportamentul elementelor din HTML . Aceast ă bibliotec ă permite accesarea
elementelor și manipularea acestora folosind arborele de obiecte DOM , crearea de
evenimente în browser și adăugarea unui comportament al paginii pe baza acestora (de
exemplu, la click pe un buton al paginii se poate crea un eveniment care s ă afișeze sau
să elimine elemente în DOM ). Alte func ționalit ăți ale Jquery sunt atribuirea sau
schimbarea propriet ăților unui element HTML sau a unui stil de tip CSS.
Una din cele mai importante caracteristici ale acestei bibilioteci este
implementarea AJAX (Asynchronous JavaScript And XML ) care permite ca transferul
de date între partea de client și cea server a unei aplica ții să fie realizat ă asincron.
Aceast ă abordare asincron ajut ă la experien ța utilizatorului în aplica ție prin
modificarea con ținutului f ără a mai re încarca pagina curent ă.
La baza acestui concept se afl ă protocolul Hypertext Transfer Protocol (HTTP)
care permite accesarea unor informa ții pentru aplica țiile distribuite și are forma
cerere -răspuns . Comunicare a în World Wide Web este realizat ă prin acest protocol și
se asigur ă date și informa ții între un client ( navigator web ) și un server . În cazul în
care se acceseaz ă un link de către un utilizator, protocolul va ști op țiunea acestuia
(dacă a trimis un r ăspuns HTTP – POST – sau a solicitat o cerere HTTP – GET ). AJAX
va aduce un rezultat în funcț ie de cererea utilizatorului, va procesa ac țiunea și va
trimite un r ăspuns dac ă opera ția a fost realizat ă cu succes sau dac ă au ap ărut erori de
server.
1.5.5 Bootstrap
Bootstrap a fost proiectat de c ătre un dezvoltator al firme i Twitter , Mark Otto ,
și a pornit ini țial ca un proiect intern în companie. Observâ nd cât de practic este acesta
la crearea design -ului aplica ției, mai mulț i programatori au contribuit la aceast ă
bibliotec ă, astfel c ă acest framework a ajuns în ziua de ast ăzi la cea de -a patra
versiune.
Bootstrap este o bibliotec ă destinat ă aplica țiilor web și cuprinde caracteristici
ce ajut ă la stilizarea elementelor de tip HTML . Printre cele mai importante se num ără:
aplicarea unui stil ce va r ămâne responsive , adic ă se va adapta în func ție de
dimensiunile ecranului dispozitivului folosit (inclusiv pe cele mobile ), are un sistem
15
de încadrare î n pagin ă bazat pe linii și coloane care ajut ă la organizarea con ținutului
pe pagin ă și cel mai important este îmbună tățirea experien ței utilizatorului prin
adăugarea unei clase din Bootstrap .
1.6 SQL Serve r
SQL Server a dost creat de Microsoft în anul 1989 și reprezintă un sistem de
gestiune al ba zelor de date rela ționale ce este alc ătuit din limbajul de interogare SQL,
care se ocupă de preluarea informațiilor, și limbajul procedural T-SQL, care se ocup ă
de gestionarea bazelor de date din sistem .
Baza de date reprezint ă nucleul aplicaț iei, unde se stocheaz ă toate datele
necesare din site și poate fi gazduit ă pe unul sau mai multe servere. De la o aplica ție
de dimensiuni mici, p ână la o apli cație bancar ă ce de ține o cantitate de date de ordinul
milioanelor de înregistr ări, SQL Server este un sistem stabil , ce rivalizeaz ă cu Oracle
Database și cu MySQL .
Pentru a facilita accesul și utilizarea acestui sistem, Microsoft a dezvoltat o
interfa ță grafic ă numit ă SQL Server Management Studio prin care se pot crea servere ,
baze de date, tabele , view -uri, proceduri stocate , triggeri la modific ări de tip create,
update sau insert, funcții și diagrame pentru a vizualiza schema bazei de date.
Motivul alegerii acestui sistem de gestionare a bazei de date a fost integrarea
arhitecturii .NET Framework cu bazele de date SQL Server , precum și posibilitatea
conect ării într-un mod facil prin utilizarea unui ORM precum Entity Framework .
1.7 Microsoft Visual Studio
Microsoft Visual Studio este un mediu de dezvoltare ( IDE – indegrated
development enviroment ) ce permite programatorului s ă dezvolte aplica ții web precum
ASP.NET Web forms , ASP.NET MVC , servicii WCF , aplica ții scrise în limbajul Visual
Basic și Visual F# , proiecte ce ofer ă conexiunea la o baz ă de date SQL Server sau
chiar aplica ții în Python . Visual Studio oferă o gam ă largă de dezvoltare a unei
aplica ții, atât în domeniul web, cât și în cel mobil ( Xamarin ).
IDE-ul oferit de c ătre Microsoft împacheteaz ă toate tehnologiile oferite de
aceast ă companie într-un singur spa țiu de lucru, dar și alte tehnologii care pot fi
integrate cu u șurință pentru realizarea unei aplica ții ce ține pasul cu avansul tehnologic
din acest domeniu.
16
O caracteristic ă important ă a acestui mediu de dezvoltare este reprezentat ă de
debugger -ul din aplica ție cu care se pot observa opera țiile realizate la fiecare pas în
aplica ție. De asemenea, exist ă un editor denumit IntelliSense care ajut ă la completarea
automat ă de cod în cazurile în care se dore ște generarea unui constructor pentru o
clasă, a unei metod e care încă nu a fost implementat ă sau a unei clase c ătre care avem
o referin ță în cod inexistent ă.
Microsoft oferă posibilitatea ad ăugării unui proiect în dou ă sisteme de control
al versiunilor: Team Foundation Server (TFS) și Github . Până în momentul de fa ță,
TFS împreun ă cu Visual Studio oferă simplitate dezvoltatorului în a publica c âte o
versiune pentru modific ările importante ale codului prin ad ăugarea unui comentariu
legat de contribu ția sa și, op țional, atribuirea task-urilor rezolvate prin publicarea
codului.
În cazul în care serverul de TFS asociat proiectului nu a fost creat, el se poate
crea imediat de pe site -ul IDE-ului, iar proiectul se adaug ă în proiectul de pe server. În
plus, dac ă se dore ște revenirea la o versiune anterioar ă sau compararea cu ultima
versiune de pe server se poate realiza astfel:
Fig. 6 Prezentarea IDE-ului Visual Studio și a Team Foundation Server
1.8 Design pattern și utilitatea în aplica ție
Utilizarea design pattern -urilor în aplica ție va duce la îmbun ătățirea calit ății
codului scris și va reduce mult din timpul alocat dezvolt ării unui produs. Introducerea
17
acestora vor asigura un cod mult mai bine structurat și organizat, aduc ând un mare
avantaj proiectelor mari în care mai mul ți programatori vor lucra pe aceeași aplicație .
Chiar dac ă acest capitol este cunoscut de c ătre persoanele cu experien ță în
domeniu, am încercat s ă aduc un plus de extensibilitate aplica ției mele prin
implementarea unor pattern -uri. În condi țiile în care aplica ția va avea succes, nu se
poate exclude posibilitatea ca un alt programator s ă lucreze la acest proiect, iar
experien ța acestuia la dezvoltarea și extinderea aplica ției ar trebui s ă fie una
mulțumitoare.
1.8.1 Singleton
Conceptul de singleton reprezint ă unul dintre cel mai simplu design pattern și
are rolul de a crea un singur obiect din clasa respectiv ă și acesta să fie folosit pe
parcursul rul ării aplica ției. Chiar dac ă într-o aplica ție de dimensiuni mici nu se poate
vorbi de încărcarea memoriei, în momentul în care o aplica ție va fi extins ă la mai
multe proiecte ce folosesc o serie de obiecte instan țiate dintr -o clas ă, vom avea nevoie
de acest concept pentru optimizarea aplica ției. Aceast ă variabil ă de tip singleton poate
fi folosit ă în condi țiile în care se va dori p ăstrarea informa țiilor pe timpul întregii
sesiuni a utilizatorului f ără a se modifica tipul variabilei de la începutul sesiunii p ână
la finalul acesteia.
Structura unui singleton este definit ă simplu prin ad ăugarea unei variabile
statice care va fi instan țiată o singur ă dată la crearea obiectului și un constructor privat
care nu îi va permite instan țierea unui obiect în cadrul altei clase din aplica ție. Un
exemplu despre cum am implem entat în „Find my band” un singleton pentru sesiunea
utilizatorului se regase ște mai jos:
public class SessionWrapper
{
// variabila statica utilizata in aceasta clasa
private static SessionWrapper instance;
//instantierea obiectului daca nu exista
public static SessionWrapper Instance =>
instance ?? (instance = new SessionWrapper());
// constructorul privat
private SessionWrapper()
{
}
}
18
1.8.2 Dependency injection si Repository pattern
Cele doua concepte sunt utilizate împreun ă în aplica ția „Find my band” și
asigur ă îmbun ătățirea codului și reutilizarea acestuia pentru opera țiile ce au rol de a
manipula baza de date.
Dependency injection , dupa cum spune și numele, permite unei clase s ă
utlizeze varibilele și metodele altei clase prin ad ăugarea unei referin țe către un obiect
instan țiat.
Conceptul de repository este reprezentat de felul în care o clas ă poate avea un
set de metode ce vor fi apelate în func ție de ținta aplica ției, f ără a realiza schimb ări
masive în cod. S e pot ob ține informa ții din mai multe clase ce au un comportament
asem ănător, un exemplu foarte bun fiind momentul în care aplica ția va trebui s ă se
conecteze la dou ă baze de date și se vor defini dou ă referin țe într-o singur ă clasă, fără
a mai repeta codu l.
De asemenea, în cazul în care vom dori s ă adăugăm o clas ă de testare ce va
verifica funcționalitatea corect ă a aplica ției, vom ad ăuga doar o referin ță către aceasta,
ce va fi ini țializat ă în constructor , fapt ce demonstrează eficiența oferită de către acest
pattern.
În aceast ă aplica ție am folosit aceste concepte pentru a favora extensibilitatea
și posibilitatea de se conecta la alt ă bază de date , pe lângă cea de SQL Server .
Următorul cod va prezenta pe larg cum a fost prelucrat contextul ce folose ște operații
de manipulare în baza de date și cum este structurat codul astfel încât să poată fi
modificat cu u șurință.
public class BandRepository
{
// Dependency injection: se va lua contextul
aplicatiei, cel care se conecteaza la SQL Server
protected ApplicationContext Context;
// conceptul va adauga referinta prin
constructor
protected BandRepository(ApplicationContext
context)
{
this.Context = context;
}
19
// O metoda specifica unui repository care poate fi
//folosita si de catre un alt context care poate fi
//adaugat prin adaugarea unei referinte la alta baza
//de date
public Band GetBandById( int id)
{
return Context.Bands.AsNoTracking()
.Include(b => b.BandPlaysGenres)
.Include(b => b.BandPlaysGenres.Select(i
=> i.Genre))
.Include(b => b.UsersInBand)
.Include(b => b.UsersInBand.Select(i =>
i.Instrument))
.Include(n => n.UsersInBand.Select(u =>
u.User))
.FirstOrDefault(i => i.Id == id);
}
}
1.8.3 Factory pattern
Ultimul design pattern folosit în aplica ție este cel care cuprinde toate clasele
rezultate din pattern -ul repository și are rolul de a oferi o interfa ță dezvoltatorului s ă
poată administra serviciile și modul în care acestea sunt folosite în aplica ție.
Factory pattern , dup ă cum sugerea ză și numele, poate fi v ăzut ca o fabric ă ce
produce referin țe către mai multe clase și poate fi extins în func ție de nevoile
proiectului de tip client. Pentru aplica ția „Find my band” am inclus acest pattern
pentru a apela fiecare clas ă repository ce cuprinde opera ții de manipulare a bazei de
date dintr -un singur loc al aplica ției. Fiecare controller din proiect are un o biect de tip
factory care va putea accesa fiecare repository în func ție de ac țiunile necesare. În
cazul în care se va ad ăuga o entitate nou ă în baza de date și vom ad ăuga logica
acesteia într-un repository , vom adă uga o nou ă instan ță a clasei respective pe care o
vom apela de fiecare dat ă când este nevoie în aplica ție.
public class RepositoryFactory
{
// adaugarea contextului pentru conexiunea prin
//Entity Framework
private ApplicationContext context;
20
public RepositoryFactory()
{
context = new ApplicationContext();
}
// repository ce va aduce un singleton de tip
//userRepository
private UserRepository userRepository;
public UserRepository UserRepository =>
userRepository ?? (userRepository = new
UserRepository (context));
private GenreRepository genreRepository;
public GenreRepository GenreRepository =>
genreRepository ?? (genreRepository = new
GenreRepository(context));
private InstrumentRepository
instrumentRepository;
public InstrumentRepository InstrumentRepository
=> instrumentRepository ?? (instrumentRepository =
new InstrumentRepository(context));
private BandRepository bandRepository;
public BandRepository BandRepository =>
bandRepository ?? (bandRepository = new
BandRepository(context));
}
21
2. Descrierea aplica ției
Următorul capitol va ilustra comportamentul aplica ției, ce plus aduce ea în
momentul de fa ță în domeniul tehnologiei și cum va îmbun ătăți domeniul muzical .
Voi preciza care sunt perspectivele aplica ției, ce domenii acapareaz ă și cum va ajuta
multe persoane s ă pună în aplicare mai u șor un hobby și chiar s ă profeseze de pe urma
acesteia.
2.1 Descriere general ă
Aplica ția „Find my band” are rolul de a sprijini c ântăreții încep ători s ă își
găseasc ă o trup ă după genurile și preferin țele lor. De ase menea, trupele pot contacta
cântăre ți pentru a aplica la un post de intrument liber, similar interviurilor de angajare.
Liderul trupei îi va solicita candidatului să reproduc ă o pies ă muzical ă și, pe
baza acesteia, va lua decizia dacă este suficient de bun pentru a fi acceptat în trup ă. În
cazul în care liderul trupei este nesigur, acesta va putea contacta interpretul telefonic
ori pe adresa de email.
În aplica ție va exista și un grup al trupei în care se v or programa întâlniri,
repeti ții sau liderii vor cere p ăreri celorlal ți membri despre c ântăreții care au aplicat.
Aceast ă funci țonalitate va permite ca toate evenimentele și discu țiile între membri s ă
aibă loc pe platforma „Find my band” . Grupul trupei din aplica ție va elimina folosir ea
unei alte aplica ții de socializare în cadrul forma ției, iar unui membru îi va fi mult mai
la îndem ână să foloseasc ă o singur ă aplica ție.
În ultimul r ând, muzicienii vor putea s ă vadă cererea din domeniul artistic ,
condițiile de aplicare pentru o trup ă, genurile muzicale preferate de formații , astfel
încât să își facă o idee despre șansa lui de reu șită.
2.2 Scopul aplicatiei
Aplicaț ia „Find my band” are rolul de a ajuta cântăreț ii aflați în cautarea unei
trupe ș i de a simplifica procesul de recrutare din cadrul unei forma ții. Prin această
idee, observă m ca prin tehn ologie putem să economisim timp și bani , reducând
numarul de întâlniri pentru a intervieva persoana respectivă prin vizualizarea profilului
utilizat orului și audiția î nregistrarii trimisă de aplicant î n procesul de recrutare .
22
Ținta acestei aplicații o reprezintă persoanele care au ca hobby un in strument
muzical sau cele c u experiență și istoric într -o trupă, dar care vor s ă își găsească o
trupă nouă, ori inten ționează să înființeze o formaț ie, dar nu cunosc încă persoanele
potrivite. „Find my band” este soluția optimă pentru un nivel de începator într -o
carieră muzicală, dar se extinde și pentru o trupă cu experiență .
Orice persoană care deț ine un dispozitiv cu conexiune la internet poate accesa
aplicația, indiferent dacă este de pe un calculator per sonal, telefon mobil sau tabletă .
2.3 Detalii funcț ionale
În aplicație există patru categorii de utilizatori ce pot avea acces la conținutul
de pe site: cântăreț fă ră forma ție, membrul unei trupe, lider de trupă și administrator .
Un cântăreț este persoana care se înregistreaza în aplicaț ie pentru a-și începe o carieră
într-o trupă sau pentru a -și găsi o nouă trupă care să îi îndeplinească preferin țele.
Aplica ția îi permite artistului accesul la urm ătoarele func ționalit ăți:
• Înregistrarea imediat ă în aplica ție;
• Adăugarea instrumentelor muzicale la care a profesat ;
• Adăugarea genurilor muzicale preferate de acesta ;
• Vizualizarea profilului s ău și al oric ărui artist din aplica ție;
• Pe profilul s ău poate ad ăuga înregistr ări sugestive pentru a fi remarcat
cu ușurință de către o trup ă;
• Posibilitatea de a c ăuta trupe în aplica ție și de a vizualiza profilul
acestora ;
• Dreptul de a a plica pentru orice post liber din cadrul unei f orma ții;
• Posibilitatea de a -și crea o nou ă forma ție, ad ăugând posturile necesare
și membri care nu apar țin unei trupe ;
• Verificarea stadiului aplic ării pentru un anumit post .
Un membru al trupei este ad ăugat de c ătre lider în forma ție și are urm ătoarele
drepturi în aplica ție:
• Posibilitatea s ă participe la discu ții în cadrul grupului creat la înfiin țarea
trupei ;
• Dreptul de a ie și din trup ă în orice moment . Odat ă plecat din forma ție,
el va avea rolul unui c ântăreț;
23
• Are op țiunea de a c ăuta c ântăreți în aplica ție și de a îi recomanda în
cadrul grupului .
Forma ția este reprezentat ă de un lider de trup ă care se ocup ă de componen ța
forma ției sale și are urm ătoarele atribu ții:
• El es te cel care verific ă solicit ările c ântăreților de a ocupa un post și
poate demara procesul de recrutare ;
• Opțiunea de a trimite o melodie c ântărețului care a aplicat pe postul din
trupa liderului și de a da un r ăspuns final bazat și pe p ărerile celorlal ți
colegi ;
• Dreptul de a modifica informa țiile despre trup ă;
• Posibilitatea de a desfiin ța trupa; aceast ă funcționalitate va face ca to ți
membrii s ă devin ă cântăreți fără trupă.
Administratorul aplica ției nu va avea nicio a tribuție din cele prezentate mai
sus, av ând doar rolul de a gestiona informa țiile existente și de a șterge con ținutul
nepotrivit pentru site. Printre atribu țiile acestuia se enumer ă:
• Ștergerea utilizatorilor
• Vizualizare profil utilizator
• Adăugarea și ștergerea de instrumente
• Adăugarea și ștergerea de genuri muzicale
• Vizualizarea profilului unei trupe
• Șterge rea trupei în cazul în care se posteaz ă conținut neadecvat
• Adăugarea ora șelor și a jude țelor în aplica ție
• Ștergerea ora șelor și a jude țelor din cadrul aplica ției
2.4 Schema bazei de date
În baza de date SQL Server am creat 15 tabele care păstrează datele aplicației
sub formă structurată. Aceste tabele conțin informaț ii despre:utilizatorii din apl icație și
tipul acestora, formațiile existente și liderii acestora, orașele și județ ele d in care fac
parte utilizatorii ș i trupele, genurile muzicale și preferințele trupelor și a cântă reților
legate de acestea, cântăriț ii care sunt activi intr -o formaț ie, mesajele din cadrul
aplicației, instrumentele care prezintă interes pentru un utilizator , posturile libere
dintr -o trupă , toate aplică rile pentru acestea, profilul utilizatorului unde iș i poate
24
aăauga improvizaț ii proprii de recomandare ș i un tabel în care se vor păstra toate
înregistrările de melodii în aplicaț ie.
Pentru modelarea acestei baze de date am folosit principii de normalizare a
bazei de date prin împărțirea fiecărei entități cu atribuț iile sale, astfel încâ forma î n
care sunt structurate tabel ele să ajute la îmbunătăț irea logicii aplica ției.
Un exemplu ar fi realizarea relațiilor entității ce reprizntă cântăreți i dintr -o
formaț ie care cuprinde trei chei stră ine (pentru un utilizator, pe ntru un instrument ce
reprezintă postul aplicației ș i pentru referința către o trupă) și informația dacă este
liderul formț iei. Pentru coloana ce reprezintă referința către un util izator (cântăreț)
aceasta poate fi opțională , deoarece este posibil ca pos tul pe instrumentul respectiv să
nu fie ocupat de că tre un art ist. În schimb celelelalte referințe către trupă si instrument
sunt obligate să primească informaț ii in cazul creeri i unei înregistrări sau in cazul
actualizării unui rând din tabel.
Definind o logică direct din baza de date, vom accesa mult mai uș or
informaț iile din baza de date, iar in back -end nu va trebui să adă ugăm verifică ri
suplimentare la opera ții de tip CRUD (Cre ate, Read, Update, Delete) și vom putea
astfel, trata erorile de tip server.
25
Fig. 7: Schema bazei de date
După realizarea modelă rii bazei de date, c u ajutorul abordă rii Code first din
Entity Framework , așa cum am prezentat și î n primul capitol, am creat această bază de
date î n SQL Server prin adă ugarea unor clase C# ce reprezintă entitățile (numele
tabelelor reprezintă numele clasei din aplicație). Constrâ ngerile, cheile primare și cele
străine au fost declarate î ntr-o clasa C# ce moștentește clasa părinte
EntityTypeConfiguration , căreia î i atribuim clasa pe care se aplică aceste operaț ii.
La finalul construirii entităț ilor și a mapă rilor, cu autorul Entity Framework ,
am gener at un context care se conectează la aplicaț ie printr-un „Connection string ”.
Acest Connection string trebuie definit în fiș ierul de configurare proiectului de acces
la baza de date, cât și în fișierul de configurare a aplicaț ii de client, cea care acce seaza
informaț ii despre context.
Definirea Connection string este un tag XML de forma:
26
<connectionStrings>
<add name="ApplicationContext"
connectionString="Data Source=DESKTOP –
A3P3DCQ;Initial Catalog=FindMyBand;Integrated
Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
Contextul în aplicație este cel care va putea să execute metode din libră ria
System.LINQ , să le aplice pe o clasa C# de tip entitate și să manipuleze tabela
respectivă din baza de date . Deoarece în aplicaț ie am utilizat conceptul de Code First ,
la definirea Contextului se pot adăuga mul te opț iuni precum : crearea bazei de date
dacă nu există, ștergerea bazeiș si recrearea acesteia sau migrarea bazei de date la cea
mai recent ă versiune.
Definirea contextului în aplica ția „Find my band ” este urmă toarea:
public class ApplicationContext : Db Context //trebuie
sa mosteneasca aceasta clasa din System.Data
{
public ApplicationContext() :
base("name=ApplicationContext")
{
Configuration.LazyLoadingEnabled = false;
//acesta permite doar accesarea tabelei
//curente, f ara a aduce informatii din alta
//tabela
}
#region Definirea claselor
public DbSet<Audio> Audios { get; set; }
public DbSet<Band> Bands { get; set; }
public DbSet<BandPlaysGenre> BandPlaysGenres
{ get; set; }
public DbSet<Genre> Genres { get; set; }
public DbSet<Instrument> Instruments { get;
set; }
public DbSet<User> Users { get; set; }
public DbSet<UserInBand> UserInBands { get;
set; }
public DbSet<UserPlaysGenre> UserP laysGenres
{ get; set; }
public DbSet<UserPlaysInstrument>
UserPlaysInstruments { get; set; }
public DbSet<UserType> UserTypes { get; set;
}
public DbSet<UserApplyForBand>
UserApplyForBands { get; set; }
27
public DbSet<BandGro up> BandGroups { get;
set; }
public DbSet<UserProfile> UserProfiles { get;
set; }
public DbSet<City> Cities { get; set; }
public DbSet<County> Counties { get; set; }
#endregion
protected override void OnModelCreating(DbMod elBuilder
modelBuilder)
{
//Va crea baza de date daca nu se gaseste nicio
//referinta catre cea declarata in Connection
//String:
Database.SetInitializer(new
CreateDatabaseIfNotExists<ApplicationContext>());
base.OnModelCreating(modelBuilder);
//Adaugarea maparilor pentru fiecare entitate
//din aplicatie :
modelBuilder.Configurations.Add(new AudioMap());
modelBuilder.Configurations.Add(new BandMap());
modelBuilder.Configurations.Add(new
BandPlaysGenreMap());
modelBuilde r.Configurations.Add(new GenreMap());
modelBuilder.Configurations.Add(new
InstrumentMap());
modelBuilder.Configurations.Add(new
UserInBandMap());
modelBuilder.Configurations.Add(new UserMap());
modelBuilder.Configurations.Add(new
UserPlaysGenreMap());
modelBuilder.Configurations.Add(new
UserPlaysInstrumentMap());
modelBuilder.Configurations.Add(new
UserTypeMap());
modelBuilder.Configurations.Add(new
UserApplyForBandMap());
modelBuilder.Configurations.Add(new
BandGroup Map());
modelBuilder.Configurations.Add(new
UserProfileMap());
modelBuilder.Configurations.Add(new CityMap());
modelBuilder.Configurations.Add(new
CountyMap());
}
}
O ultimă funcționalitate importantă a acestui Context este cea de creare
automată de date la actualizarea bazei de date cu ajutorul Entity Framework . La
crearea unei migrări în aplicație, se va genera o clasă Configurations în care vom
28
putea adă uga mai multe ac țiuni la actualizarea bazei de date în metoda su prascrisă
denumită Seed . Această abordare este disbonibilă doar pentru conceptul Code First și
realizează popularea ini țială a bazei de date p e baza Contextului definit .
Prin urmare, această caracteris tică m -a ajutat să aduc o cantitate mare de
înregistră ri, precum 1800 de orașe ce aparțin unui județ, cu scopul de a oferi o
experiență din viața reală , chiar din timpul primei versiuni a aplicaț iei.
2.5 Fluxul de lucru al aplicaț iei
2.5.1 Flux ul aplicaț iei pentru un artist
Un artist ce este în căutarea unei formaț ii de muzică, va intra în aplicaț ia „Find
my band” și se va înregistra în aplicaț ie, introducând datele personale ș i interesele
acestuia în cadrul aplicaț iei. Dac ă înregistrarea utilizatorului a fost îndeplinit ă cu
succes, acesta se va putea conecta în aplica ție.
Odat ă intrat în aplica ție, acestuia îi va ap ărea o list ă cu trupe , ce în momentul
respectiv au posturi libere, în func ție de preferin țele acestuia, de zona în care se afl ă și
de interesele în materie de instrumente și genuri muzicale. Acesta poate face la r ândul
lui o filtrare manual ă în func ție de genurile preferate ale sale, de instrumentul c ăutat ce
este disponibil într-o trup ă și poate c ăuta trupe din alte ora șe în cazul în care dore ște să
își schimbe reședința și să facă parte dintr -o forma ție dintr -un alt ora ș.
Aplica ția îi pune la dispozi ție artistului posibilitatea să acceseze și să editeze
propriul profil, unde își adaug ă o descriere, interesele lui într-o forma ție și înregistr ări
personale cu instrumentul pe care îl practic ă. Toate acestea ajut ă în procesul de
recrutare într-o formatie, astfel încât liderul unei trupe își poate face o idee ini țială,
doar din viz ualizarea acestui profil.
Artistul poate s ă aplice pe orice post disponibil dintr -o trupă și, odată înscris pe
acest post, el va trebui s ă ofere un interviu trupei respective. Procesul de recrutare al
artistului în forma ție va fi prezentat pe larg la sf ârșitul subcapitolului.
De asemenea, dac ă scopul acestui utilizator este de a -și crea propria trup ă sau
nu a fost acceptat într-o forma ție muzical ă, dar totu și vrea s ă demonstreze lumii
muzicale ca are talentul și cuno ștințele necesare, el va putea s ă adauge o trup ă în
aplica ție, unde liderul va fi el însuși. El va avea posibilitatea de a chema membri în
trupa personal ă și de a seta num ărul de instrumente ce vor alc ătui forma ția.
29
2.5.2 Fluxul aplica ției pentru un artist membru într-o forma ție și a
liderilor acestora
În aplica ție exist ă utilizatori care sunt înscri și într-o forma ție și vor putea s ă
trimit ă mesaje întreg ului grup, despre întâlniri sau despre aplic ările arti știlor pentru
posturi le disponibile . Ace ști membri pot în orice moment s ă părăseasc ă forma ția
actual ă în detrimentul unei trupe ce îi prezint ă mai mult interes, astfel c ă, prin aceast ă
aplica ție, un artist poate avea comportamentul unui angajat al unei firme.
Liderul trupe i este cel care va face ac țiunile de administrare din cadrul acesteia,
putând fi ales în dou ă situații : la crearea trupei sau la p ărăsirea acesteia de că tre un
membru lider. Func țiile de care dispune liderul în aplicație sunt cele de a r ăspunde la
solicit ările candidaților , de a edita profilul forma ției și de a atrage persoane noi, pe
baza recomand ărilor.
Acest lider de forma ție de ține și atribu țiile unui membru simplu, totodată
ocup ându-se de buna func ționare a trupei. De asemenea, trupa va putea include pe
profilul respectiv informa ții și recomand ări pentru ca un artist cu experien ță să aleag ă
trupa care i se potrive ște cel mai bine și corespunde criteriilor sale.
Fig. 8: Schema aplcării pentru un post disponibil
30
2.5.3 Fluxul administratorul ui de aplica ție
Administratorul aplica ției va face periodic o verificare a corectitudinii datelor
prin interfa ța oferit ă de „Find my band” asigur ând în acest fel utilizatorului o
experien ță plăcută în navigarea aplica ției.
Rolul unui administrator este de a modifica con ținutul neadecvat și de a oferi
îmbun ătățiri prin ad ăugarea de informa ții ce îi pot oferi artistului o gam ă largă de
genuri și instrumente muzic ale din care poate alege, dar și de a ajuta la ocuparea c ât
mai eficient ă a unui post în trup ă.
2.6 Aplica ții similare
Pentru realizarea acest ui studiu de pia ță am luat în considerare și aplica țiile
deja existente pentru a vedea ce oportunit ăți are o astfel de aplica ție și cum a ș putea
optimiza domeniu l muzical . Am observat c ă domeniul IT încă nu a acaparat lumea
artiștilor, iar celor debutan ți nu li se ofer ă prea multe variante c ând vine vorba de
ascensiunea într-o carier ă muzical ă.
Cu toate acestea, analiz ând câteva aplica ții disponibile online, am observat c ă
poten țialul maxim nu a fost atins de c ătre acestea și că o astfel de idee în care tot
managementul unei forma ții – de la înfiin țare, la completarea numărului membrilor și
până la discu ții între cei din componenta trupei – ar avea succes . Nu am reu șit să
găsesc o astfel de aplica ție disponibil ă în țara noast ră sau care s ă conțină date
relevante pentru noi, ceea ce m ă face s ă cred c ă „Find my band” va fi un real ajutor
pentru tinerii arti ști rom âni care vor s ă facă parte sau s ă înființeze o forma ție.
În cele ce urmeaz ă voi ilustra două aplica ții web care au pornit de la ideea
găsirii unei trupe :
31
Fig. 9 : Aplica ția “Join a band”
Sursa: https://www.join -a-band.com/ads?adtype=available
Fig.10 : Aplica ția “Join my band ”
Sursa: https://www.joinmyband.co.uk/
Ambele aplica ții ilustr ate p ăstreaz ă aceea și idee: utilizatorul intră în aplica ție
doar pentru a -și căuta o trup ă. Un artist poate selecta zona de provenien ță a trupei și
viceversa, poate filtra rezultatele dup ă postul c ăutat în forma ție, dup ă interesele
forma ției și dup ă genuri le muzicale c ântate în cadrul trupei. În ceea ce prive ște
vizualizarea profilului, cele dou ă site-uri ofer ă informa ții despre artistul care a postat
un anun ț sau trupa care caut ă să își completeze echipa, însă totul se limiteaz ă în jurul
acestor func ționalități .
La nivelul celor dou ă aplica ții se poate observa existen ța unor anun țuri din
diverse ora șe ale lumii, astfel c ă o aplica ție îmbun ătățită și complex ă va atrage un
public mai larg, motiv pentru care am ales realizarea acestui proiect.
32
3. Dezvoltarea aplica ției
3.1 Înregistrarea în aplica ție
La începutul utili zării aplica ției, un vizitator va avea posibilitatea de a se
înregistra în cazul în care nu a f ăcut-o deja. El va trebui s ă completeze c âmpurile cu
informa țiile personale precum: email, nume, prenume, num ăr de telefon, experien ța în
domeniu, data na șterii. Aceste c âmpuri sunt obligatorii de completat în aplica ție pentru
a se înregistra cu succes și trebuie s ă respecte condi ții minime stabilite într-un model.
Aceste valid ări sunt pr ezente în aplica ție ca atribute asociate unei propriet ăți. O
validare pe adresa de email este reprezentat ă astfel:
[Required] //atribut ce obliga utilizatorul sa
complete email -ul
[EmailAddress] // atribut ce obliga utilizatorul sa
completeze o adresa de / /email valida
public string Email { get; set; }
De asemenea, la înregistrare se vor cere și informa ții legate de domiciliul
actual al artistului, de genurile muzicale preferate de c ătre acesta și de instrumentele
pe care le cunoa ște în momentul de fa ță. Utilizatorul este obligat s ă completeze aceste
câmpuri pentru a facilita experien ța sa în cadrul utiliz ării aplica ției.
Fig. 11: Pagina de înregistrare în aplicație
33
3.2 Autorizare în aplica ție și logare
Utilizatorul care a trecut de procesul de înregistrare în aplica ție va trebui s ă se
logheze cu email -ul și parola . Pentru a nu exista mai multe persoane care au acela și
email, înainte de înregistrarea în aplica ție se face o verificare dac ă email -ul exist ă în
baza de date.
Pentru accesarea aplica ției se va verifica dac ă informa țiile introduse de c ătre
utilizator sunt corecte printr -o acțiune a unui controller care va apela serviciul de
utilizator și îl va c ăuta în baz ă dacă există .
Cu ajutorul arhitecturii ASP.NET MVC putem utiliza o serie de atribute care
ajută la autorizarea în aplica ție și la con ținutul pe care un anumit tip de utilizator îl
poate accesa. Dac ă logarea în aplica ție a fost îndeplinit ă cu succes, se va ad ăuga o
permisiune utilizatorului curent prin structura de date enum . Astfel, clasa care
define ște controller -ul cu autorizare va con ține deasupra defini ției sale urm ătorul
atribut:
[AuthorizePermissions(Permissions.canAccessApp)]
3.3 Vizualizarea și editarea profilului personal
La intrarea în aplica ție vom avea mai multe pagini web disponibile printre care
se afl ă vizualizarea profilului . Se pot accesa at ât informa țiile utilizatorului curent, c ât
și informa țiile despre al ți utilizatori din aplica ție. În cazul în care artistul se afl ă pe
pagina profi lului personal, acesta are op țiunea de a edita informa țiile sale în cazul în
care s -a produs o eroare de scriere la înregistrarea în aplica ție.
34
Fig. 12 Vizualizarea profilului unui artist
3.4 C ăutarea unei trupe în aplica ție
Pentru c ă principalul scop al site -ului este găsirea trupelor potrivite pentru un
artist și viceversa, aplica ția va face o potrivire ini țială după locația artistului și dup ă
numărul de genuri și de instrumente care se potrivesc cu ale acestuia. Urm ătorul cod
prezint ă metoda care va prelua cele mai relevante trup e din baza de date în func ție de
aceste criterii:
public List<Band>
GetMostRelevantBands(List<Instrument> instruments,
List<Genre> genres)
{
return Context.Bands.AsNoTracking().Include(b =>
b.BandPlaysGenres).Include(b =>
b.BandPlaysGenres.Select(y => y.Genre))
.Include(b =>
b.UsersInBand).Include(b => b.UsersInBand.Select(y =>
y.Instrument))
.OrderByDescending(i =>
(i.BandPlaysGenres.Select(g =>
genres.Contains(g.Genre)).Count()) +
(i.UsersInBand.Select(inst =>
instruments.Contains(inst.Instrument)).Count())
).ToList();
}
Pe lângă această filtrare automat ă a datelor, utilizatorul are posibilitatea de a
selecta filtre în func ție de zona în care se afl ă trupele , dar și de pozi țiile libere într-o
trupă ce pot fi completate de cuno ștințele artistului .
3.5 Gestionarea unei trupe în aplica ție
3.5.1 Crearea unei trupe
În cazul în care un cântăreț dorește să înfiin țeze o trup ă, acesta are posibilitate a
să o fac ă direct din aplica ție. La crearea forma ției se vor cere informa ții privind
numele acesteia, o descriere formal ă și posibilitatea de a adăuga un num ăr maxim de
15 instrumente disponibile. La trimiterea solicit ării de creare , artistul trebuie s ă
completeze orice c âmp ce reprezint ă posturile cu instrumentul de care este nevoie,
pentru a se respecta componen ța unei trupe . Artistul nu este ob ligat s ă completeze
35
posturile cu al ți cântăreți, av ând posibilitatea de a -i ad ăuga dup ă vizualizarea
profilurilor corespunz ătoare.
La înregistrarea trupei, se vor trimite solicit ări membrilor disponibili (care nu
fac parte dintr -o trup ă la momentul respec tiv) pentru a accepta sau refuza postul în
trupă.
Fig.13 Pagina de creare a unei trupe
3.5.2 Vizualizarea și editarea profilului unei trupe
După ce a trupa fost creat ă de către un artist, acesta va deveni liderul forma ției,
va putea s ă vizualizeze profilul trupei create și să editeze unele informa ții în cazul în
care au ap ărut gre șeli la introducerea titlului sau a descrier ii ori dacă se vor mai
adăuga genuri muzicale experimentate de c ătre band și membri i din componen ța
trupei.
36
Fig. 14 Vizualizarea profilui unei foramții muzicale
În calitate de lider a l trupei, el va putea elimina orice post din forma ție, fie el
ocupat sau nu, însă nu va putea modifica instrumentul sau persoana în condi țiile în
care postul este ocupat. Aceast ă funcționalitate îi va asigura unui membru c ă nu i se
poate modifica statutul în trup ă dupa voia liderului.
De asemenea, orice membru poate p ărăsi trupa respectiv ă în orice moment,
însă în mod special, la p ărăsirea de către lider a bandului , urm ătorul care va deveni
lider va fi membrul cu cea mai mare experien ță în domeniul muzicii, asigur ând astfel
continuitate și buna administrare a forma ției.
37
Fig. 15 Administrarea posturilor pentru o trupă
3.6 Vizualizarea aplic ărilor curente în aplica ție
În aplica ție exist ă o pagină care oferă informații despre stadiul aplicărilor
pentru două categorii de utilizatori: un artist sau un lider de trupă.
De asemenea, există un proces de oc upare a postului destul de minuțios, care
constă în mai multe stă ri. Acestea sunt r eprezentate în baza de date sub formă de
numere de la 0 la 4, iar în proiect au fost transpuse î ntr-o structura enum de forma:
public enum ApplicationForBandState
{
NewApplication = 0,
BandSentDemo = 1,
SingerSentSong = 2,
AcceptedInBand = 3,
RejectedInBand = 4
}
Artistul prime ște în acest meniu de administrare tot istoricul aplic ărilor sale
într-o trup ă, putând vedea pentru fiecare caz urm ătoarele tipuri de aplic ări:
• Aplic ări către posturi care încă nu au fost vizualizate de c ătre un lider
de band ;
• Aplic ările care au fost vizualizate de c ătre liderul forma ției în care
exist ă postul disponibil și va reproduce melodia trimis ă de acesta ;
38
• Liderul trupei a decis c ă acest artist este cel mai bine pregatit să intre în
trupă și artistul ce a aplicat va opta pentru acceptarea ori refuza rea
ofert ei;
• Liderul trupei a respins aplicarea artistului dup ă audiția interviului
Din punctul de vedere al liderului, acesta va primi în meniul s ău urm ătoarele categorii
de ap licări:
• Cele care încă nu au fost vizualizate și care nu au primit melodia ce va
trebui reprodus ă de către aplicant ;
• Cele care au primit r ăspuns din partea aplicantului, liderul urmând să ia
o decizie asupra acesteia ;
• Rezultatul ocup ării postului (cine a acceptat oferta și cine a refuzat -o).
Fig.16 Pagina de administrare a aplicărilor pentru formație
3.7 Vizualizarea interviului pentru postul liber
La aplicarea unui artist într-o forma ție, liderul acesteia va trebui s ă trimit ă un
demo pe care candidatul să îl reproduc ă. Acesta va trebui s ă adauge o pies ă și un link
către un site ce îi va oferi partitura piesei respective. În cazul în care acesta a ad ăugat
un fi șier care nu este de tip audio, aplica ția îl va aten ționa pe liderul trupei s ă adauge
un fișier corect.
Înainte ca liderul forma ției să publice piesa în meniul de aplicare, aplica ntul
pentru postul corespunz ător nu va putea s ă acceseze aceast ă pagin ă. Doar dup ă
adăugarea piesei demonstrative, acesta va avea permisiunea de a trimite un r ăspuns în
decursul a 48 de ore , cu piesa reprodus ă. Acela și comportament la ad ăugarea unui
39
fișier ce nu este de tip audio îl va avea aplica ția și la ad ăugarea piesei de c ătre artist.
La finalul acestui proces se va lua o decizie în privin ța accept ării sau refuz ării
artistului pe baza meniului de interviu al aplica ției.
Fig.17 Vizualizarea stadiului interviului pentru postul liber din trupă
Toate fi șierele de tip audio vor fi p ăstrate în baza de date sub forma unui array
de bi ți și se va p ăstra și tipul acesteia. Aplica ția va permite utilizatorului s ă adauge
doar fi șiere de format audio ce vor fi procesate cu ajutorul clasei HttpPostedFileBase
ce permite transformarea dintr -o variabil ă ce poate returna con ținutul în aplica ție și
tipul acestu ia (audio, imag ine sau video) într-un array de bi ți cu con ținutul ad ăugat. În
exemplul urm ător voi exemplifica cum va fi manipulat și adăugat în baza de date
fișierul trimis de c ătre un lider de trup ă:
[HttpPost]
// se implementeaza o metoda ce primeste u n model ce
contine un fisier de tip HttpPostedFileBase
public ActionResult SendDemo(ApplicationModel model)
{
var uploadedFile =
newbyte[model.File.InputStream.Length];
model.File.InputStream.Read(uploadedFile,
0, uploadedFile.Length) ;
// se va citi fisierul primit din model si se va
stoca intr -o variabila //de tip array de biti
40
// se face verificarea ca fisierul inclus
sa fie de tip audio
if (model.File.ContentType.StartsWith( "audio"))
{
var audio = new Audio
{
Content = uploadedFile,
ContentType =
model.File.ContentType
};
if (audio != null)
{
var audioId =
Services.AudioRepository.AddAudio(audio);
if (audioId != 0)
{
Services.ApplicationRepository.SendDemo(model.BandId,
model.UserId, model.InstrumentId, audioId);
return RedirectToAction( "Index", new { bandId =
model.BandId, userId = model.UserId, instrumentId =
model.Instru mentId });
}
}
}
return RedirectToAction( "Index", new { bandId =
model.BandId, userId = model.UserId, instrumentId =
model.InstrumentId });
}
3.8 Grupul cu discu țiile membrilor dintr -o trup ă
După ce a fost creat ă o trup ă, toți membrii existen ți ai acesteia vor putea accesa
o pagin ă cu discu ții interne în forma ție. Scopul acestei func ționalit ăți este de a p ăstra
legătura între membri în aceast ă aplica ție și de a ajuta liderii de grup s ă ia deciziile
corecte în urma unor discu ții cu restul trupei.
În aceast ă conversa ție, fiecare artist va putea vizualiza mesajele într-un mod
interactiv, care s ă permit ă membrului prezent în aceast ă interfa ță să disting ă
persoanele care au trimis mesajul și să diferen țieze mesajele sale de c ătre altele ce
provin de la utilizatori diferi ți.
Indiferent dac ă membrii trupelor sunt activi sau offline în aplica ție, ace știa vor
putea s ă vizualizeze orice con ținut din aceast ă pagin ă în orice moment și în cazul în
care a fost trimis un mesaj nou care nu a fost vizualizat, acestuia îi va ap ărea în meniul
din st ânga al aplica ției o avertizare de tipul „New message(s)” . Aceast ă funcționalitate
va determina membrul s ă utilizeze grupul de mesaje din aplica ție prin a -i atrage aten ția
41
că există mesaje în aplica ție neciti te. În cazul în care în trup ă se discut ă despre o
întâlnire pentru repeti ții sau stabilirea orei unui concert, acesta nu va rata acesta
informa ție.
3.9 Panoul de administrare
Cum orice aplica ție deține o list ă de administratori care se ocup ă de gestionarea
conținutului , „Find my Band” define ște de asemenea utilizatori care s ă poată modifica
sau șterge informa ții existente în baza de date.
În cazul în care un utilizator f ără drepturi de administrator va încerca să
acces eze acest panou de administrare, el va fi redirec ționat c ătre o pagin ă de
autentificare în aplica ție, dacă deține un cont de administrator. În controller -ul ce
define ște ac țiunile fiec ărui utilizator vom putea de fini urm ătorul atribut de autorizare
în pagina:
[AuthorizePermissions(Permissions.canAccessAdminApp)]
Rolul de administrator în aplica ție pentru un utilizator va fi setat de c ătre o
persoan ă specializat ă care are acces la baza de date și îi va seta permisiunil e în
aplica ție. Pentru aceast ă aplica ție nu am l ăsat permisiunea unui administrator s ă
adauge alt administrator pentru a nu crea o bre șă de securitate în aplica ție, prin
ștergerea informa țiilor de c ătre o persoan ă neautorizat ă.
Acest panou de administrare permite editarea, crearea și ștergerea unor
informa ții ce sunt referitoare la instrumente, genuri muzicale, ora șe, jude țe și profiluri
de utilizatori.
3.9.1 Administrarea arti știlor în aplica ție
În aceast ă pagină a aplica ției vor fi afi șați arti știi din aplica ție ce vor avea o
referin ță la profilul personal și care poate fi analizat cu u șurință de către administrator.
La accesarea paginii, se vor afi șa câte 10 arti ști pe pagin ă pentru verificarea mai
eficient ă de către administrator . Pentru a naviga prin lista complet ă acesta va avea la
dispozi ție paginarea de c ătre aplica ție. Aceast ă paginare va facilita viteza acces ării
meniului de administrare pentru c ă nu va fi adus pe ecran tot con ținutul din baza de
date și nu vom îngreuna experien ța utilizatorului în accesarea acestei pagini .
În cazul în care un administrator va dori s ă ștearg ă un utilizator din aplica ție, el
va ține seama c a toate leg ăturile utilizatorului respectiv să fie șterse, mai pu țin
42
mesajele din grupul tru pei (în cazul în care a fost înscris într-una). Informa țiile ce vor
fi eliminate din baza de date odat ă cu ștergerea artistului sunt: preferin țele
instrumentelor unui artist, genurile preferate ale acestuia, postul în trup ă în cazul în
care este membru activ al acesteia și aplic ările sale pentru alte posturi.
3.9.2 Administrarea instrumentelor muzicale
În ceea ce prive ște panoul de administrare a instrumentelor muzicale,
administ ratorul aplica ției va primi o list ă cu toate instrumente le existente în baza de
date și va putea s ă efectueze modific ări asupra acestora, s ă le editeze numele în
situația introdu cerii eronate și să le ștearg ă în cazul în care se repet ă în aplica ție sau nu
corespund unui instrument existent. De asemenea, adminis tratorul poate ad ăuga un
nou instrument dacă acesta nu exist ă în aplica ție, fapt ce va îmbun ătăți experien ța
artistului în aplica ție prin posibilitatea de a alege din mai multe variante disponibile.
3.9.3 Administrarea genurilor muzicale
Panoul de administrare a genurilor muzicale este asem ănător cu cel pentru
intrumente și va pune la dispozi ție administratorului s ă facă opera ții de editare a
numelui pentru un gen muzical în cazul în care a ap ărut o gre șeală gramatical ă la
adăugarea acestuia și de a completa o list ă în situația sesiz ării absen ței sale di n
aplica ție.
3.9.4 Administrarea jude țelor
O alt ă funcționalitate dob ândită de către administratorul aplica ției este cea de
editare a jude țelor existente în aplica ție. Pentru aceast ă versiune a aplic ației am stabilit
ca jude țele s ă facă parte doar din Rom ânia deoarece, în cazul în care aplica ția va fi
utilizat ă în realitate, publicul țintă va fi cel din țara noastră . Aplica ția poate fi extins ă
cu ușurință în cazul în care ar avea un real succes, putându -se adăuga și o altă ț ară
care, la rândul ei, cuprinde o list ă de regiuni/jude țe asociate acesteia. Administratorul
are posibilitatea de a șterge un jude ț, de a ad ăuga unul sau de a modifica numele
acestuia, în situația apariției unor modific ări ter itoriale.
3.9.5 Administrarea ora șelor
Ultima funcție de administrare în cadrul aplica ției se refer ă la gestionarea
orașelor existente în baza de date și este asem ănătoare cu panoul destinat jude țelor.
43
Modificarea numelui unui ora ș este destul de importan tă deoarece, în cazul în care
aplica ția va fi utilizat ă în țări str ăine, va trebui efectuată o verificare a con ținutului
afișat în site , întrucât un alt administrator poate afi șa con ținut într-o limb ă ce nu este
suportat ă de către aplica ție. Un alt aspect important al modific ării unui ora ș este faptul
că se poate schimba județul de provenien ță al acestuia într-o eventuală transformare
din punct de vedere adminis trativ.
Fig. 18 Panoul de administrare
44
4. Concluzi i
Aplicația „Find my band” va aduce o îmbunătățire domeniului muzical prin
felul în care sunt gestionate trupele, prin posibilitatea artiștilor de a se dezvolta în
cadrul unei formații și prin eficientizarea procesului de căutare a unui post liber.
Toate funcționalitățile aplicației vo r ajuta atât membrii unei trupe, cât și un
artist dornic de a face parte din componența unei formații. Pentru o trupă, aplicația îi
permite membrilor acesteia să utilizeze o singură platforma în ceea ce privește
stabilirea detaliilor importante precum : adăugarea unui artist în echipă, stabilirea unei
întâlniri pentru repetiții sau anunțarea participării întregului efectiv de membrii la un
eveniment. Procesul de aplicare în trupa și interfața oferită liderului îl va ajuta pe cel
din urmă în luarea celei mai bune decizii în cazul în care există posturi neocupate și va
elimina procesul îndelungat de interviuri pentru căutarea unui nou membru.
În ceea ce privește un artist, acesta va fi îndrumat de către aplicație la găsirea
unei trupe potrivite în funcție de g enurile muzicale si instrumentele cunoscute, dar și
în funcție de locația curentă a acestuia. Precum la angajarea unei persoane în cadrul
unei firme, acesta va trebui sa iși personalizeze profilul astfel incât artistul să convingă
liderul formației că este cel mai potrivit să devină viitorul membru al echipei. O altă
opțiune utilă a unui artist este de a încerca succesul în domeniu prin deschiderea unei
noi formații, fapt care promoveaza cântareții cu idei inovative, ce vor să debuteze pe
piata muzicală din România.
Aceste două posibilități ale unui artist va face experiența lui în aplicație mult
mai atractivă, ceea ce mă face să cred că proiectul „Find my band” va aduce cu
usurință noi utilizatori odată cu lansarea pe piața IT din România.
Ideea inițială a aplicației a pornit de la dificultatea unui artist de a face parte
dintr -o formație muzicală și, chiar dacă au fost implementate funcționalități ce pot
atrage artiști si trupe noi pe platforma, se pot adăuga mult mai multe funcții ce duc l a
îmbunătățirea experienței utilizatorului. Una dintre cele mai mari funcționalități ce ar
trebui implementată în viitor și care va avea un succes imens va fi ca în meniul de
aplicare a unui artist într -o formație, liderul acesteia să fie ajutat de către u n sistem de
inteligență artificială care generează un rezultat de pe urma analizării celor două piese
adăugate în sistem (cea trimisă de către liderul grupului și cea reprodusă de către cel
care a aplicat). Această idee ar promova ca în viitorul apropiat s ă fie eliminat procesul
45
îndelungat de recrutare într -o formație, iar rolul liderului rămâne de a stabili criteriile
de promovare în formația sa și de a oferi un verdict pe baza acestui rezultat.
După analizarea tuturor cazurilor de utilizare și a imbunătă țirilor ce pot fi
adăugate într -o versiune ulterioară, pot spune că aplicația „Find my band” îndeplinește
nevoile unui artist din domeniul muzical. Cu ajutorul acestei lucrări, am pus în
aplicare toate informațiile dobândite în timpul celor trei ani de stu diu prin îmbinarea
unor cunoștințe precum: baze de date, algoritmi, programare orientată -obiect,
dezvoltarea unei aplicații de tip web și structuri de date. Experiența dobândită în
timpul realizării aplicației „Find my band” mi -a confirmat plăcerea de a co ntribui,
oricât de puțin, în domeniul IT și dorința de îmbunătățire a conținutului accesat de
către utilizatorii conectați la internet.
46
Bibliografie
[1] Joseph Albahari , Ben Albahari, „C# 6.0 in a Nutshell: The Definitive Reference ”,
Editura O’Reilly, 2015
[2] Douglas Crockford , „JavaScript: The Good Parts”, Editura O’Reilly, 2008
[3] Adam Freeman , „Pro ASP.NET MVC 4 ”, Apress, 2014
[4] Julia Lerman , Rowan Miller , „Programming Entity Framework: Code First”,
Editura O’Reilly, 2011
[5] https://www.c -sharpcorner.com/article/C -Sharp -and-its-features /
[6] https://en.wikipedia.org/wiki/.NET_Framework
[7] https://en.wikipedia.org/wiki/ASP.NET_MVC
[8] https://www.tutorialspoint.com/asp.net_mvc/asp.net_mvc_overview.htm
[9] http://www.e ntityframeworktutorial.net/EntityFramework -Architecture.aspx
[10] https://ro.wikipedia.org/wiki/HyperText_Markup_Language
[11] https://en.wikipedia.org/wiki/ASP.NET_Razor
[12] https://en.wikipedia.org/wiki/Cascading_Style_Sheets
[13] https://ro.wikipedia .org/wiki/JavaScript
[14] https://ro.wikipedia.org/wiki/JQuery
[15] https://www.w3schools.com/jquery/jquery_ref_ajax.asp
[16] https://ro.wikipedia.org/wiki/Hypertext_Transfer_Protocol
[17] https://en.wikipedia.org/wiki/Bootstrap_(front -end_framework)
[18] https://en.wikipedia.org/wiki/Microsoft_SQL_Server
[19] https://en.wikipedia.org/wiki/Software_design _pattern
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Aplicație Web pentru gestionarea trupelor și interpreților muzicali COORDONATOR ȘTIINȚIFIC Lect. Dr. Mihail CHERCIU ABSOLVENT Tudor BARCAN BUCURE ȘTI… [607575] (ID: 607575)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
