[ pl4stik @ 28.04.2016. 11:45 ] @
Dobio sam sam zadatak za poso i OK sve ja to mogu da resim ali ovu recenicu nikako ne kapiram

"The persistence format of the phone book library should be a file, which is not text-based (XML, JSON etc. are
not allowed) and is not an embedded DB either (i.e. SQLite, Access, Excel, etc. are not allowed)"

Jel imao neko iskustva sa ovako necim ?

Evo ga ceo zadatak:
"Develop a reusable library in C# to manage phone books for users. No user interface is required, only an
API to create, delete and edit phone book entries. Each entry would contain: name (first and last), type
(Work, Cellphone or Home) and number. Multiple entries under the same name are allowed. The
persistence format of the phone book library should be a file, which is not text-based (XML, JSON etc. are
not allowed) and is not an embedded DB either (i.e. SQLite, Access, Excel, etc. are not allowed). In
addition to creating/editing/deleting, the library also needs to support iterating over the list in
alphabetical order or by the first or last name of each entry."
[ dusans @ 28.04.2016. 11:53 ] @
Teraju te da izumeš neki svoj binarni format.
[ djoka_l @ 28.04.2016. 11:54 ] @
Lepo je napisano, treba da bude file, ali ne tekst fajl. Ne treba da bude ni u bazi podataka
Dakle, binarni fajl.

Pogledaj .net binary serialization ili nešto slično.

Čini se da je ovo neki zadatak za vežbu, ne vidim razlog da tekst fajl ne može da odradi posao. Osim ako nije cilj vežbe da demonstrira poznavanje rada sa binarnim fajlovima u C# jeziku...
[ vujkev @ 28.04.2016. 12:02 ] @
Mislim da je ovde poenta da napraviš neko svoje rešenje. Sa xml, json,
sql i sl sa "dva klika" možeš sve to da napraviš koristeći već
postojeće biblioteke, ali njima je cilj da vide kako bi ti rešio
problem od nule.
[ pl4stik @ 28.04.2016. 12:14 ] @
Neki moj binary jel ce da posluzi, doooobro ma nema frke be ...
[ dusans @ 28.04.2016. 12:26 ] @
Googlaj taj zadatak, ima rasprava o njemu, šta drugi "cene" da se traži.
[ pl4stik @ 28.04.2016. 12:42 ] @
Da da da mogli su lepo da napisu custom binary il tako nesto i sve bi bilo jasno, a ovo "cenenje" moz da me iskosta lots of quality time ... Nego ajde te puste pare obecane
[ pl4stik @ 10.05.2016. 08:47 ] @
OK evo napravio sam ga ali je "weak solution" pa sad treba da napravim drugi. Jel moze neko da pogleda sta je weak u prikacenom projektu i po mogucstvu neke preporuke/how to kako da ne bude weak...
[ jablan @ 10.05.2016. 08:56 ] @
okači sors negde, kačenje zip arhiva po forumima je weak.
[ pl4stik @ 10.05.2016. 09:13 ] @
Ocu evo casna rec samo zbog ovog komentara nego da ga ne kacim ovako weak
[ pl4stik @ 10.05.2016. 10:54 ] @
Evo ga na github
https://github.com/cikavelja/phonebook
[ ravni @ 10.05.2016. 11:34 ] @
Mozda zameraju sto se nakon izmene snima sve - nema inkrementalnog updejta.
[ pl4stik @ 10.05.2016. 11:42 ] @
Pa dobro to je sitno za prepravku al ja sam dobio odgovor ne valja pravi novo ?!? pa rekoh da pitam sta sam to tolko pogresio ...
[ dejanet @ 10.05.2016. 12:02 ] @
Verovatno kao minimum moras da koristis Thread-Safe collections i demonstriras 'atomicnost' operacija.
[ jablan @ 10.05.2016. 12:06 ] @
Ja bih rekao da je u pitanju ovo što je @ravni napisao. A to nije baš mala promena. Nisam siguran da uopšte možeš da koristiš BinaryFormatter.

Na kraju krajeva, niko ne može znati šta su oni hteli i na šta su želeli da se obrati posebna pažnja. Npr, ti sve čuvaš u nekoj in memory listi, sortiraš listu na zahtev, možda oni očekuju da bude neki perzistentni storage, da čuvaš indeksirano, da vraćaš iteratore umesto cele liste itd.

Onda, klasa Phone ti je ustvari kolekcija telefonskih brojeva, a svaki User opet ima kolekciju ovih kolekcija, to nema puno smisla.

Sve u svemu, kod ti je OK ali svakako nije seniorski. ;)

[Ovu poruku je menjao jablan dana 10.05.2016. u 13:17 GMT+1]
[ Mihajlo Cvetanović @ 10.05.2016. 12:53 ] @
Veliki je problem to što ne znamo šta krajnji korisnik hoće. Ja bih ga zato pitao. Neka od pitanja: šta je potrebno da postoji od funkcionalnosti? Kakve se performanse očekuju (vreme odziva funkcija)? Koliko maksimalno korisnika i telefonskih brojeva se očekuje? Koliko maksimalno radne memorije biblioteka može da zauzme? Da li se očekuje da se biblioteka koristi iz više procesa i iz više radnih niti u jednom procesu (ovo je ta pomenuta atomičnost)? Da li više različitih korisnika sa različitim Windows privilegijama može da koristi biblioteku, bilo istovremeno, bilo naizmenično?

Sad kad već imaš nešto da pokažeš kupcu dodatno pitanje je šta bi kupac želeo da bude promenjeno u ponuđenom rešenju.

Ako je krajnji kupac zapravo profesor ili budući poslodavac, i ti tu zapravo pokazuješ šta znaš, onda je dodatno pitanje kakvo tehnološko znanje treba pokazati? Podrška za LINQ, višenitnost, možda još nešto?

Neka od navedenih pitanja su prilično specifična, i odgovor na njih može bitno da zakomplikuje celu priču i produži razvoj možda i na dva meseca. Od tebe i tvojih ciljeva zavisi da li ćeš se usuditi da postaviš takva pitanja.
[ pl4stik @ 10.05.2016. 13:23 ] @
@Mihajlo
Ma kakav kupac pa kupci se normalno ponasaju ovo nema veze sa tehnickim zahtevom ovo je test... Inace nemam ja problem da postavim nikakva pitanja u vezi bilo kakvog .NEt i JS programiranja ukoliko je za pare, a ako nije ovo je super kad procitas zadatak ...
Citat:
dejanet: Verovatno kao minimum moras da koristis Thread-Safe collections i demonstriras 'atomicnost' operacija.

Da ovo je nice to do
·         You are encouraged to use .NET Framework 3.5 or later

·         Having unit tests in your project is a plus (preferably with NUnit)

·         Thread-safety of the library is a nice-to- have feature.

·         XML documentation of the API is welcome, too
zato i imaju ove privatne funkcije lock, a za atomicnost ne znam ne pise, a i ako su hteli trebali su da napisu...
@ravni
Pa ne moze drugacije valjda sa binarijem, a update ako radis i definises UserID novi rekord ce biti dodat sa tim tvojim guid-om... itd...

Ma moze na milion nacina a ovo je jedan i ako se nekom nesto ne svidja on kaze to promeni nego tako je to kad je bez pare aka test

JBT Em bez pare jer je test em non-stop ja nesto pretpostavljam dok citam ovaj njihov zahtev, a onda mi vrate i kazu solution ti je weak napravi novo more sacu da im posaljem jedan odgovor

[Ovu poruku je menjao pl4stik dana 10.05.2016. u 14:38 GMT+1]
[ negyxo @ 10.05.2016. 20:56 ] @
Da sam ja dobio da ti radim review, na osnovu ovoga vec sto si napisao (ne ulazim u to kakav je tacan zadatak), ja bi ti dao par primedbi:

- Sredi identanciju, generalno meni ovo nije neki problem kada vidim i obicno ne zameram, ali neki minimum da bude uredno je potrebno.
- Svaka klasa u poseban fajl (naravno, postoje izuzeci, ali s obzirom da je ovo test, ipak bi i to gledao)
- ne koristi nikad stringove za control flow, ovo je prvo i najociglednije pravilo da neko ne razume type system, pa samim tim svejedno mu je da li radi C# ili js
- Ne razumem svrhu za lock (BTW, ako budes radio ikad neke komplikovanije multithreading stvari, lock izbegavaj po svaku cenu, immutable i re-entrant metode su tvoj spas), lock koristis u re-entrant metodi, sta tacno lock treba da brani? Nema ni svrhu mnogo lock stavljati nad FS, cak i da je zadatak da pravis ACID DB, to bi onda moralo da fercera na nivou OS-a, ne samo na nivou processa, pa samim tim bi morao i sa mutexima da se igras, no cela poenta je da je lock sasvim bespotreban
- Za public API, nikad ne koristi List<T>, cak i IEnumerable<T> je nekad nesiguran, opet, za multithreading jedino array ([]) sa immutable tipovima jedino stvarno radni posao
- Ne hvataj toliko visoko exception, nema potrebe, od exceptiona se brani samo tamo gde mislis da ima smisla, nikad neces naciniti program stablinijim ako dodajes sto vislje i svuda exception (type system is your friend)


Ovo su neke stvari koji mi padaju prvo na oko, neke druge stvari poput organizacije same klase bi moglo vise da se prica, i zahteva vise informacija sta je sam smisao zadatka, ali cak i sa ovim moze bolje. Drugo, ono sto meni generalno smeta je kada neko u strongly type sistemima trazi neke unit testove, na tvom primeru, a i na primeru drugih, osim hype, ne vidim nikakav razlog za ovu nebulozu (osim na integration testotove, jedini realni vredni testovi). Recimo tvoj primer:

Code:

        [Test]
        public void dGetUsersWhereParameterIsSortinParammeter()
        {
            var phonebook = new PhoneBook();
            Assert.IsInstanceOf(typeof(List<User>), phonebook.GetUsers(""));
        }


Nema smisla, type system ti garantuje da je List<User> uvek vracen (naravno, govorimo o tipu, ne i o instanci, na zalost C# nema non-null referentne tipove).

Nadam se da ovo neces shvatiti kao kritiku, nego na savet sta da ne/radis za ubuduce, pa samim tim i sto bolje naucis C# :)


[ Mihajlo Cvetanović @ 11.05.2016. 10:23 ] @
Drugim rečima, da ne shvati kao zlonamernu kritiku, nego kao dobronamernu kritiku..