Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024

Suprasolicitare sistem electric
 CIV auto import

Mutare in MOZAMBIC - pareri, expe...

Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...
 Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...

Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...
 Kanal D va difuza serialul “...

Upgrade xiaomi mi11

securitate - acum se dau drept - ...

Farmacia Dr Max - Pareri / Sugest...
 

Baze de date embedded – exercitiu practic (pentru programatori mid-level)

* * * - - 2 votes
  • Please log in to reply
183 replies to this topic

#91
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
Ai dreptate, am uitat sa chem metoda validate ().

#92
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
Am curățat domain model.

#93
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 OriginalCopy, on 21 septembrie 2018 - 15:11, said:

Exceptie in constructor: https://github.com/w...rc/Mark.php#L28

Datorita exceptiei, nu poti construi VOs invalide. Si datorita faptului ca celelalte modele accepta exclusiv VO, nu poti infecta niciun alt model cu date invalide (sintactic).

Contact(std::string_view lastName, std::string_view firstName, std::string_view phoneNumber) noexcept;

	Contact(LastName const& lastName, FirstName const& firstName, PhoneNumber const& phoneNumber) noexcept;






După ce rezolvi asta, putem vorbi despre o clasă Contact incoruptibilă.

#94
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
Done.

Am rezolvat și issue-ul legat de pattern matching, deși se putea mai bine aici (regex-ul nu este cel mai permisiv).

#95
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
C++ are un soi de pattern matching cu std::variant si visit, dar nu e prea frumos.

#96
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Până acum am tot menționat și aplicat niște principii.

Dacă te uiți pe main, care dintre aceste principii sunt violate?


main e parte din ui desktop plugin și acest plugin are ca dependințe domain model și storage.

Faptul că aceste dependințe sunt menționate în main e ok.

Dar ce nu e ok?



#97
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
Faptul că PhoneBook nu manageriază plugin-urile de sub ea?

#98
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 jegmihai, on 22 septembrie 2018 - 18:59, said:

Faptul că PhoneBook nu manageriază plugin-urile de sub ea?

Fierbinte.

Întrebarea era ce e în neregulă cu main.

#99
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
Anterior ai spus că este OK și daca asamblez plugins manual, deci nu este asta.

Faptul că le adaug in PhoneBook?

Deși nici asta nu-mi pare în neregulă.

Faptul că instanțiez PhoneBook?

#100
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 jegmihai, on 22 septembrie 2018 - 19:22, said:

Anterior ai spus că este OK și daca asamblez plugins manual, deci nu este asta.

Aia a fost atunci. Acum codul arată omenește pe unele fronturi, și a venit vremea reconsiderării unor decizii.

Dar vreau să văd dacă faci o distincție anume legată de "asamblarea" asta.

Ceva e în neregulă cu ea, dar ce?

Uită de trecut. Uită-te pe cod așa cum e el acum, și gândește-te la principii.


#101
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
Expun clase concrete de plugins?

Pe lângă asta, InMemorySQLite își expune readModel-ul.

"leaky abstractions"

#102
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Nu înțeleg exact, dar nu e asta. Vorbim despre main și nimic altceva.

"asamblarea" e practic corect, dar e compusă din diferite lucruri.

Unul din acele lucruri e definitiv greșit.

#103
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013

 OriginalCopy, on 22 septembrie 2018 - 20:43, said:

dar e compusă din diferite lucruri.
Să vedem.

InMemorySQLiteStoragePlugin storagePlugin;

...

UiPlugin uiPlugin(argc, argv);


Instanțierea plugin-urilor mi se pare perfect în regulă.

storagePlugin.init();

uiPlugin.init(std::vector<IPlugin*>{&storagePlugin});

Inițierea fiecăruia din nou este OK. Și tu ai menționat acest lucru.

if(storagePlugin.run())
return uiPlugin.run();

Singurul lucru greșit s-ar putea ascunde aici. (Am făcut abstracție de PhoneBook).

#104
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Ok, rezolv misterul: faptul că main nu doar că știe care sunt pluginurile, ci și dependențele fiecăreia și ordinea lor când e apelat init.

Aceste lucruri ar trebui tratate de fiecare plugin în parte.

E vremea acelui getDependencies și tot mecanismul adiacent.

Ca parte din acest refactoring:

Introduci un director nou src/infrastructure/

Muți phonebook în el și o redenumești Application. Application va ști cum să initializeze pluginurile și să le execute.

Creezi phonebook în domain model. Are ca membru o map de ContactId și Contact.

Repository nu îți returnează o listă de contacte din search și listAll, ci PhoneBook cu contacte în ele.

Ui folosește PhoneBook peste tot, consistent.



#105
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013

 OriginalCopy, on 22 septembrie 2018 - 22:06, said:

Muți phonebook în el și o redenumești Application. Application va ști cum să initializeze pluginurile și să le execute.

Creezi phonebook în domain model. Are ca membru o map de ContactId și Contact.
Clasa PhoneBook devine Application?

#106
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 jegmihai, on 23 septembrie 2018 - 18:01, said:


Clasa PhoneBook devine Application?

Da.

#107
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013

 OriginalCopy, on 22 septembrie 2018 - 22:06, said:

Introduci un director nou src/infrastructure/

Muți phonebook în el și o redenumești Application. Application va ști cum să initializeze pluginurile și să le execute.

Creezi phonebook în domain model. Are ca membru o map de ContactId și Contact.

Repository nu îți returnează o listă de contacte din search și listAll, ci PhoneBook cu contacte în ele.
Done.

Trebuie acum să implementez sistemul de asamblare.

#108
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 jegmihai, on 24 septembrie 2018 - 10:24, said:

Done.

Trebuie acum să implementez sistemul de asamblare.
In main vei avea doar apeluri app.addPlugin() si return app.run() sau similar.

Food for thought: o alta varianta ar fi sa ai o clasa PluginRegistry care stie toate pluginurile si adaugarea de pluginuri in app e facuta in colaborare app <-> registry.

Ar fi overengineering din punctul meu de vedere. Tu ce crezi si de ce? Si daca esti de acord ca ar fi overengineering, in ce situatii ai introduce totusi un astfel de registru?

Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate