Pereiti prie turinio

highontrance

Nariai
  • Pranešimai

    108
  • Užsiregistravo

  • Lankėsi

  • Atsiliepimai

    0%

highontrance Pranešimai

  1. Aciu uz issamius atsakymus :) (joke)

    Na ce panagrnejau truputi ir jau matau sviesa tunelio gale :) Truputi ispleciau programa. Toks panaudojimas validus ar nelabai jusu akim? (Aisku klasiu instances kurciau bootstrap'erije jei tai butu normali programa na bet esme turetu buti aiski)

     

    Entry point:

    
       class Program
       {
           private static Validation validation = new Validation();
           private static XmlLogger xmlLogger = new XmlLogger(validation);
           private static TextLogger textLogger = new TextLogger(validation);
    
           static void Main(string[] args)
           {
               Console.WriteLine("Enter name:");
               var name = Console.ReadLine();
    
               Console.WriteLine("Enter password:");
               var password = Console.ReadLine();
    
               validation.ValidateInput(name, password);
    
               Console.ReadLine();
           }
       }
    

     

     

    Prideta klase validacijai:

    
       public class Validation
       {
           public EventHandler<UserCredentialEventArgs> ValidateUserCredentials;
    
           public void ValidateInput(string name, string password)
           {
               if (!String.IsNullOrWhiteSpace(name) && !String.IsNullOrWhiteSpace(password))
               {
                   OnValidateInput(name, password);
               }
           }
    
           private void OnValidateInput(string name, string password)
           {
               var handler = ValidateUserCredentials;
               if (handler != null)
                   handler(this, new UserCredentialEventArgs(name, password));
           }
       }
    

     

     

    EventArgs:

    
       public class UserCredentialEventArgs : EventArgs
       {
           public UserCredentialEventArgs(string name, string password)
           {
               Name = name;
               Password = password;
           }
    
           public string Name { get; set; }
           public string Password { get; set; }
       }
    

     

     

    Perdarytos logger klases:

    
    public class XmlLogger
       {
           public XmlLogger(Validation validation)
           {
               this.validation = validation;
    
               validation.ValidateUserCredentials += (s, e) =>
               {
                   WriteXml(e.Name, e.Password);
               };
           }
    
           private Validation validation;
    
           public void WriteXml(string name, string password)
           {
               using (var stream = new FileStream("myXmlLog.xml", FileMode.Create))
               {
                   var doc = new XDocument(new XElement("UserInfo",
                                           new XElement("UserName", name),
                                           new XElement("AccessCode", password)));
    
                   doc.Save(stream);
    
                   Console.WriteLine("XmlLogger logged your message.");
               }
           }
       }
    
    
       public class TextLogger
       {
           public TextLogger(Validation validation)
           {
               this.validation = validation;
    
               validation.ValidateUserCredentials += (s, e) =>
               {
                   WriteText(e.Name, e.Password);
               };
           }
    
           private Validation validation;
    
           public void WriteText(string name, string password)
           {
               using (var streamWriter = new StreamWriter("myCustomLog.txt"))
               {
                   streamWriter.WriteLine("Login: {0}", name);
                   streamWriter.WriteLine("Password: {0}", password);
    
                   Console.WriteLine("TextLogger logged your message.");
               }
           }
       }
    

  2. Dekui, susitvarkiau :)

     

    Dabar kita problema, nesuprantu kodel neleidzia rasyti windowsu i sita diska.

    Ka cia daryt?

     

    As tiksliai nezinau kam sitas diskas reikalingas bet ce sistema sau rezervuoja 100mb nuo visu tavo particiju ir tu i ce nieko neirasysi nes diske tik 100mb vietos. Sita diska palik ramybei :) (as bent jau palieku) Tu jo nematysi kai susiinstalins windowsai. Tavo error message uzstoja kitus diskus (arba tu jau esi isformataves juos ir tau turetu rasyti "Unalocated space" ar kazka tokio). Tarkim raso uanalocates space = 500gb. Dabar is tos unalocates space (vietos kuri nepanaudota) turi sukurti diskus tiek kiek tau ju reikia. Ir kai tai padarysi pasirinksi diska kuriame nori kad butu windowsai ir instaliok. Tik ziurek ten kai kursi diskus viska raso kilobaitais ar baitais as nepamenu tai nepadaryk klaidos ir irasyk kiek tau jos reikia butent tam diske. Sukursi viena diska. Tarkim turi viso vietos 500gb. Sukursi diska su 200gb gal kita su 150gb (tavo nuoziura) ir kai kuris paskutini nerasyk tiksliai tu gb i ta laukeli o palik kiek irasyta kas reiks kad paskutinis diskas pasiims visa likusia vieta. Ir galutiniam variante Unalocated Space bus lygu 0. O poto kaip jau ir rasiau pasirinksi diska kuriame nori irasyti Win ir rasysi.

     

    EDIT: Nepamirsk kad kai suinstaliosi Win turesi rankiniu budu suformatuoti nesisteminius diskus (diskus kuriuose nera win) nes jie nesusiformatuoja automatiskai tau rasant. Susiformatuos tik C (bent jau dzniaisia buna raide C) nes jame yra Win failai. Kiti diskai tures tik alokuota jiems vieta. Tai kai irasysi ant tu disku spausi desni peles klavisa ir format.

     

     

  3. Sveiki, turiu ce toki klausima susijusi su Events C# kalboje. Maciau daug pavizdziu ir visur pagrindine mintis buna tokia: "Norint obijektui A (potencialiai ir daugiau obijektu) pranesti, kad kazkas nutiko obijektui B galim panaudoti event's kaip transportavimo mechanizma. Na isivaizduokim turiu keleta "Logger" klasiu ir noriu jog jos logintu zinutes kurias iveda vartotojas.

     

    Main:

       class Program
       {
           static readonly NotificationPipeline NotificationPipeline = new NotificationPipeline ();
           static readonly TextLogger TextLogger = new TextLogger();
           static readonly XmlLogger XmlLogger = new XmlLogger();
    
           static void Main(string[] args)
           {
               Console.WriteLine("Enter name:");
               var name = Console.ReadLine();
    
               Console.WriteLine("Enter password:");
               var password = Console.ReadLine();
    
               NotificationPipeline.SecretOperation += TextLogger.WriteText;
               NotificationPipeline.SecretOperation += XmlLogger.WriteXml;
    
               NotificationPipeline.OnSecretOperation(name, password);
    
               Console.ReadLine();
           }
       }
    

     

    Logger klases:

       public class XmlLogger
       {
           public void WriteXml(string name, string password)
           {
               using (var stream = new FileStream("myXmlLog.xml", FileMode.Create))
               {
                   var doc = new XDocument(new XElement("UserInfo",
                                           new XElement("UserName", name),
                                           new XElement("AccessCode", password)));
    
                   doc.Save(stream);
    
                   Console.WriteLine("XmlLogger logged your message.");
               }
           }
       }
    
       public class TextLogger
       {
           public void WriteText(string name, string password)
           {
               using (var streamWriter = new StreamWriter("myCustomLog.txt"))
               {
                   streamWriter.WriteLine("Login: {0}", name);
                   streamWriter.WriteLine("Password: {0}", password);
    
                   Console.WriteLine("TextLogger logged your message.");
               }
           }
       }
    

     

    Klase kurioje patalpinau event'a:

       public delegate void UserCredentialHandler(string userName, string password);
    
       public class NotificationPipeline
       {
           public event UserCredentialHandler SecretOperation;
           public void OnSecretOperation(string userName, string password)
           {
               if (SecretOperation != null)
                   SecretOperation(userName, password);
           }
       }
    

     

    Mano supratima apie event'us labai gerai parodo sitas paveikslelis:

     

    image_172FE501.png

     

    Nesuprantu event naudos nes vistiek turiu naujinti instances klaseje kuriame yra Main metodas tam kad galeciau subscribinti i eventa. Ar nepaprasciau butu rasyti InstanceName.MethodName(); ?? As aisku suprantu, kad siame mazame pavizdyje naudoti eventus yra overkill, na bet isivaizduokime kad turiu dar koki 10 klasiu kurios turi gauti sias zinutes, mano galva esme islieka tapati nes juk turiu gauti instance tai InstanceName.MethodName(); lyg ir paprasciau. Kas keisciausia, tai kad man viskas aisku kai naudojami event'ai WPF, WinForm's appsuose, kai yra subscribinama i UIElement'o eventus. Bet kai reikia kazka su event'ais padaryti paciam (grinai mokymosi tiksliais) as juose nematau prasmes. O beveik visur kur beskaityciau rasoma "Events play important part in .NET framework and also in a line of enterprise applications". Butent important zodelis man ir neduoda ramybes nes atrodo, kad as ce vienas toks kuriam nedaeina :)

     

    P.S. Be sito pavyzdzio ka ce parasiau turiu pas save padares WPF applicationa pagal MVVM. Turiu klases ShippingService, BillingService, OrderService ir dar keleta. Noreciau, kad kai vartotojas spaudzia migtuka "CheckOut" servisu metodai kurie yra subscribine i tam tikra eventa pradetu savo darbus (shipping, billing etc..) Bet velgi, as savo VM turiu siu service instances tai tiesiog kvieciu metoda per instance. Aisku viskas veikia kaip ir turi veikti tik beda ta, kad kuriau as ji tai event'ams ismokti o aiskios naudos juose nematau.. Jei galit pateikit pavyzdziu savu kas turit, kad grinai matytusi nauda pacio panaudojimo. Aciu :)

  4. Pas mane "Asus" laptopas:

     

    CPU:

    Intel Core i7 2630QM @ 2.00GHz

    Sandy Bridge 32nm Technology

     

    RAM:

    12.0GB Dual-Channel DDR3 @ 647MHz

     

    Motinine:

    ASUS N73SV

     

    Vaizdo korta:

    1023MB NVIDIA GeForce GT 540M

     

    Pirkau 2012 metais uz 3000LT. Ramu max kad naudotu dar nebuvau pasiekes, kas liecia Visual Studio tai nestabdo neikiek. Battlefield 4 ant max negaliu lost, bet ant medium ir kaika ant high padarius viskas ok.

    Per 2 metus niekas nesugedo isskirus USB issimale lizdai, bet ce visiem taspas. Kas liecia temperatura tai perki laptopa butinai ir pada pirk. Del Acer tai ka galiu pasakyt jog irgi turejau ir taip jis labai kaista, temperos vidurkis budavo sudejus ivairiu daliu ~80 laipsniu, o Asus ~40 - 50.

  5. Per interfeisą tu nieko nenusiųsi, interfeisas tik aprašo, kokius metodus turės klasė, kuri tą interfeisą implementina.

     

    Pas tave null ne account, o pats accountRepository. Nes tu jį tik declarini ir niekada nieko jam nei prisikiri, nei jį inicializuoji, tavo accountRepository yra null. Ant šitos "SaveAccount" eilutės užsidedi breakpointą, nes čia klaida pareina, ir pasiinspectini kintamuosius.

     

    Blogai mokaisi. Nėkiek nesuprasdamas IoC iškart pradedi daryti kažkokį darbą. Reikėjo nuo šito pradėti: http://pastebin.com/zeD35wdz

     

    19 eil. apsirašai savo Repository interfeisą

     

    24 ir 32 eil. - dvi skirtingos to interfeiso implementacijos - viena darbui su MS SQL duomenų baze, kita - su Postgre SQL.

     

    40 eil. - kokia Worker klasė, kuri dirbs su IRepository. Tai reiškia ne su interfeisu, o su pačia implementacija. Tad 9 ir 11 savo Worker klasei paduodame ne interfeisą (var repo = new IRepo() waaat, net nesikompiliuotų), o klasę, kuri tą intefeisą implementuoja - t.y. new MSSQLRepo() ar new PostgreSQLRepo().

     

    IRepo repository turi vistiek būti normali klasė. Vien parašyti IInterface neužtenka, vistiek turi jam priskirti naują ar egzistuojančią klasę su 'new RealiKlasė()', magiškai niekas ten neatsiras.

     

    Kaip matai naudojami Interfeisai tam, kad būtų labai lengva pakeisti didelę posistemę - pereini nuo vienos duomenų bazės prie kitos = parašai naują IRepo implementaciją, visų Worker klasių kaitalioti nereikia.

     

    Realiam gyvenime interfeisai naudojami dėl testavimo, kad būtų lengva paduoti savo mock'ą, tokios rimtos implementacijos vargiai kada besikeičia

     

    Tei va, dabar arba rankomis savo RegistrationFormViewModel konstruktoriuje ( https://github.com/D...iewModel.cs#L22 ) prirašai accountRepository = new AccountRepository(), arba susikonfigūruoji kokį dependency injectorių, kad į IRepo automatiškai injectintų tavo AccountRepository klasę. Mano laikais populiariausi buvo Ninject ir CastleWindsor. Tačiau dabar darbe visą laiką rašome paprastesnius home made injectorius, nes šitie turi labai labai daug nereikalingo bloat ir noticable performance hit.

     

    Dekui, tikrai padejai. Perdaug ilgai man sitas strigo. As jau kai declarinau interface ir nepriskyriau jam jokios klases tas jau atrode keista, buvo aisku, kad turi priskirti ta klase kuri inheretina IAccountRepository. Tik niekaip neisgalvojau kaip ta padaryti jei neturiu reference i persistence layer'i. As visada zinojau apie dependency injectorius, man idomu kaip jie veikia, nenoriu naudoti to ko nesuprantu. Kas del sito app tai ce as siaip retkarciais dadedu kanors, bet rasau del mokinimosi tikslu sau :)

  6. Kas yra NullReferenceException as zinau, esme ta, kad as ce viska initializines (matomai ne) bet man trace nieko neparodo, InnerException = null. Tikrai neklausciau jei nebuciau isbandes. Man idomu ties kuria vieta ten null nes as pvz i accountRepository.SaveAccount(account); vietoi account buvau irases (new Account{name = ir t.t.}) Vistiek gaudavau null. O klausimas tai ce nekvailas. As nekalusiau delko gaunu null, sita pats issiaiskinsiu as klausiau kaip man nusiusti duomenis per interface i kita projekta (repository layer) jeigu mano repository priklauso nuo domain (domain neturi reference i repository o duomenis siunciami turi buti is jo).

  7. Sveiki, darau ce tokia programa savo malonumui ir truputi uzsstrigau. Taigi turiu "Visual Studio solution" kuri turi savije 3 atskirus layer'ius ((projektus)Presentation, Domain, Persistence). Kiekvienas layeris patalpintas i savo assembly.

    Presentation ir Persistence layeris referencina Domain layeri.

     

    Presentation layer:

    WPF application, turi keleta texto ivedimo lauku (Name, Surname ir t.t.) kurie subindinti su atitinkamomis property ir kai vartotojas paspaudzia migtuka (CreateAccount). ViewModel'ije kvieciamas sitas metodas.

    http://i61.tinypic.com/25aj6g0.jpg

     

    accountRepository siame metode yra Interface fieldas IAccountRepository kuris atrodo sitaip:

     

    http://i58.tinypic.com/s6jgow.jpg

     

    Persistence layer:

    Inheretina Interface IAccountRepository ir implementuoja jo metoda.

     

    http://i62.tinypic.com/becy8m.jpg

     

    As noriu kviesti savo IAccountRepository Interface metoda ir taip pasiustu sukurta Account'a i Persistence layeri o ten account'as butu ivestas i duomenu baze. Kadangi Domain layeris savije nereferencina nei Persistence nei Presentation layerio truputi pastrigau sitoje vietoje ir neismastau kaip pasiusti duomenis. Dabar jei viska darau pagal taip kaip ce nupastinau tai gaunu "NullReferenceException" ties 'accountRepository.SaveAccount(account);

     

    Visas kodas ce: https://github.com/Donatasinfo/AutoDeals

    PS. Jei kasnors ce nesavo vietoje irgi noretusi isgirsti komentaru. Isanksto dekoju uz atsakymus.

     

     

  8. Ka zinau tai C#, T-SQL, Entity Framework, XAML, XML, HTML, CSS apie metus laiko programuoju kasdien, gan gerai gaudausi kas kur. Weba bandziau pagal MVC, bet neuzkabino. Pats darau projektus WPF, METRO pagal MVVM patterna. Kas liecia versiju kontrole tai GitHub moku naudotis. Ruosiosi laikyti

    Exam 70-483: Programming in C# :)

  9. Taigi iskilo klausymas, jeigu darbo pokalbio metu darbdavys praso parodyti pavizdziu ka esi padares, kokia tai turetu buti programa, kad netektu raudonuoti :) ? Ce kandidatuojant i junior C# developer pozicija. Noreciau kad atsakytumet pagal save, ka parodytumet jus? Ir ar yra teke kada gauti uzduociu darbo pokalbio metu, bei kokios jos buvo? Isanksto dekoju uz atsakymus.

  10. Sveiki, turiu ce toki neaiskuma. Darau forma pagal mvvm standartus ir noriu naudoti password box, bet negalima bindinti pacio passwordo property. Ka tokiu atveju darot? Dabar esu padares EventHandler'i "OnPasswordChanged" ir idejas koda i CodeBehind. Kodas EventHandlerije

     (registrationFormViewModel).PasswordOne = PasswordOne.Password;  

    Sitaip paemu property is ViewModel'io ir tiesiog imetu i ja passworda. Bet sitas daiktas pazeidzia MVVM standartus. Ka galima butu pabandyti? Pakolkas galvoju prideti atached property, bet gal yra kitu minciu?

  11. Darbe tuom užsiima architektai ir dokumentuotojai.

     

    Namų projektuose, beabejo, pasibraižau ir apsirašau komentarais viską. Pusę paskui ignoruoju, pusę pakeičiu on the fly ir vėliau b**** gaunas su kodo maintainability. :D

     

    Man tas pats :D apsirasau atrodo viska kaip turi buti, tada pradedu rasyti, ziuriu kad reik pakeist tai ce tai ce :D

  12. Tai listą pakeisk bet kokia klase, kuri priima skirtingus objektus based on one or couple traits...

     

    Be generics:

    http://pastebin.com/NNbxCBby

    var docARepo = new DocumentARepo();

    Tą patį Š rašyti keliose vietose. Pats smagumas prasidėtų, kuomet DocumentsXRepository papildyti kažkuom reikėtų - tą patį devyniose vietose keisti?

     

    Su generics:

    http://pastebin.com/v1nFEqah

    var docARepo = new DocumentRepo<DocumentA>();

     

    Dabar kaip ir aiskiau :) dekui

  13. Norejau pasiiaiskinti apie architektura. Ar pries pradedant rasyti koda pasibraizot koki plana? Ar rasot is to kas galvoje ir po truputi sulibdot programa. Ce gal butu daugiau klausimas tiem kas freelancina, nes imonese kiek zinau tai visuomet buna koksnors tai planas. Asmeniskai as labai jau tingiu ta daryti :D bet suprantu, kad jau turint plana pradejus kodint viskas vyktu tikrai manau greiciau. Buvai ce seniau uzsikabines UML ismokti, bet upas prapuole :D beje, ar dazna imone naudoja UML diagramas lietuvoje?

  14. Paprastas pavyzdys būtų...

    Kadangi masyvai turi griežtai nurodytus tipus (int, String...), tai List (sąrašą) gali sukurti iš kokio tik nori (na, ne visiškai bet kokio) masyvo.

     

    Sita as ir parasiau :) Klausimas buvo delko programuotojas noretu kurti Class<T> (Ta prasme kurti pats o ne imti is .NET) su list'ais viskas aisku. Man reikia realios situacijos, kaip pvz, Reikejo padaryti ta ir ta, ir mes nusprendem padaryti taip, delto kad tas ir tas ir t.t. Arba nebutinai realios, bet tokios kurioi reiketu tokia klase kurti blink.gif

  15. Kam reikalingos generic klases. Pvz:

     

    Class Thing<T>()

    {

    T myValue;

    }

     

    Ta prasme su generics kaip ir viskas beveik aisku tarkim List<T> irgi yra klase terp .NET (Class List<T>) ir instancijuodami mes nurodome tipa vietoi T. As List<T> mintyse skaitau (List of the given type). Man idomu butu suzinoti delko developeris galetu noreti kurti generic tipo klase. Koks butu tikslas ta daryti? Jei galit pateikit pavyzdziu kur jums teko susidurti ir kuret tokia klase, ir delko priimtas buvo sis sprendimas.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...