Biblioteki na każdą okazję

Muszę przyznać, że uważam pracę programisty za mocno powtarzalną. Nie ma się co oszukiwać, jak pracuję w firmie tworzącej software to potrzeby klientów zazwyczaj są bardzo podobne. Często tworzy się niemal identyczne rozwiązania ze zmienionymi logotypami firmy i kilkoma szczegółami. Mam wrażenie, że w pracy programistów webowych jest to szczególnie widoczne. Kiedyś dyrektor znanej warszawskiej firmy informatycznej powiedział mi „Przykro mi Kajetan. Trzeba się przyzwyczaić do tego, że praca web developera to w 90% klepanie CRUDów, a w 10% robienie czegoś ciekawego.” Sam wcześniej doszedłem już do tych wniosków, ale kiedy wypowiedział to ktoś inny to niestety nabrało to jeszcze większej mocy. W związku z tym w każdym projekcie w którym mam moc decyzyjną używam kilku standardowych bibliotek. Nie czynią one mojego projektu przyjemniejszym, czy bardziej ciekawym, ale ułatwiają sporo, a także pozwalają zrobić i się nie narobić.

 

Entity Framework – chyba najbardziej oczywisty wybór (dla mnie) przy każdym projekcie korzystającym z bazy danych. Sposób użycia tego ORMa opisywany był już miliard razy na wszelkich portalach, blogach, forach, książkach itp. Dzięki temu znalezienie rozwiązania ewentualnego problemu to kwestia kilku chwil. Dodatkowo możliwość wygenerowania diagramu ukazującego model bazy danych nieraz pomagał w zarządzaniu projektem. Sam osobiście jednak odszedłem jakiś czas temu od tworzenia modelu i teraz tworzę kontekst ręcznie. Pozwala mi to na łatwiejszą integrację z kontenerami IoC. Dodatkowo wiem, że jak coś nie działa to jest to moja wina i mimo wszystko łatwiej mi znaleźć źródło problemu.

Do tej pory zawsze korzystałem z podejścia Database First. Tworzyłem sobie bazkę i później odzwierciedlałem tabele w dedykowanych klasach. Ostatnio jednak stwierdziłem, że sporo z tym zachodu i postanowiłem spróbować podejścia Code First. Jak mi to wyszło? Dowiecie się już niedługo 🙂

SimpleInjector – czy jakikolwiek inny kontener IoC to w każdym projekcie must-have. Wzorzec DI wszedł już w moją głowę tak głęboko, że przy nowych projektach nawet się nie zastanawiam czy korzystać czy nie. Kiedyś zastanawiałem się nawet czy samemu nie zaimplementować takiego mechanizmu skrojonego na moją miarę. Szybko jednak odwiódł mnie od tego pomysłu Maciek Aniserowicz w swojej serii postów Cykl DI. Z pisaniem swojego kontenera jest jak z tworzeniem własnego silnika blogowego. Można, wielu się nad tym zastanawia, tylko po co? Rozwiązania na rynku są naprawdę świetne, a jeśli zaczniemy pisać po swojemu to albo zajmie nam to niepotrzebnie dużo czasu, albo po prostu porzucimy ten temat, bo nie będzie nam się chciało go dalej rozwijać.

SimpleInjectora opisywałem już ostatnio. Kontener IoC jakich wiele, ale działa sprawnie, szybko i bezproblemowo. Ma sporo możliwości, które wciąż odkrywam, ale najbardziej podoba mi się to, że konfiguracja jest wręcz ekspresowa. Od użycia w Social Cooking wiem, że ta biblioteka zostanie ze mną na długo 🙂

AutoMapper – tutaj chyba mój ulubieniec. Ileż to się kiedyś nakopałem z tym, żeby z modelu zrobić ViewModel. Przepisywanie za każdym razem wszystkich właściwości w tę i we w tę było moim znienawidzonym zajęciem. Aż tu nagle przez zupełny przypadek napotkałem AutoMappera. Biblioteka, która zajmuje się tym czego oczekuję od bibliotek – sprawia, że ja mam mniej pracy 🙂 Wystarczy, że na początku projektu stworzę klasę AutoMapperConfig, której metodę ConfigureMaps() wywołam w Global.asax, czy Startup.cs i już mogę pięknie zamieniać modele na VM i na odwrót jedną wszystko mówiącą linijką kodu:

DishViewModel newDishVm = Mapper.Map<Dish, DishViewModel>(newDish);

Samo narzędzie jest super-konfigurowalne i naprawdę niewielkim nakładem wstępnej pracy potrafi potem wspaniale wyczyścić kod.

Bootstrap – no i na koniec biblioteka znana chyba wszystkim web developerom. Biblioteka bardzo użyteczna, ale jednak trzeba uważać z nadmiernym jej używaniem. Ostatnio powstała strona Every bootstrap website ever, która w dosadny sposób pokazuje, że nadmierne używanie bootstrapa (a nawet motywów stworzonych na jego podstawie) powoduje powstawanie klonów stron. Stron które wyglądają niemal identycznie, fajnie się przewijają, ale jednak nie niosą ze sobą niczego innowacyjnego. Dlatego ja osobiście używam go głównie do pomocy w uzyskaniu strony responsywnej, takiej która będzie na każdym urządzeniu/przeglądarce wygląda tak jak sobie tego życzę.

Oczywiście to nie wszystkie biblioteki, których używam w swoich projektach. Te tutaj wymienione są jednak podstawą do budowania praktycznie każdej strony. A Wy? Macie jakieś swoje ulubione biblioteki? Być może używacie innych, które spełniają te same założenia co te wymienione powyżej? A może macie inne, których użycie bardzo polecacie? Podzielcie się swoimi doświadczeniami w komentarzach 🙂

 

Related posts

  • Pingback: dotnetomaniak.pl()

  • Generalnie taki standard:), a od frontu co się pojawia najczęściej? Knockout, angular, react czy raczej klasyczne widoki razor i jqery?

    Co do mapowania polecam ExpressMapper’a http://www.expressmapper.org/#benchmarks,
    Zastanów się czy nie warto się przerzucić. Działa dużo szybciej.

    • Kajetan Duszyński

      Jeśli chodzi o front to w prywatnych projektach ostatnio angular rządzi (pierwsza wersja), bo chcę się go dobrze nauczyć. Za jakiś czas pewnie spojrzę też na reacta, który z tego co widziałem zyskuje ogromną popularność. Chyba, że możesz polecić coś ciekawego/nietypowego.
      W pracy za to głównie działam z Razorem i JQuery.

      Dzięki za ExpressMapper’a. Na pewno się przyjrzę 🙂

  • Marcin Lange

    Jeżeli chodzi o Entity Framework i Bootsrapa to podpisuję się dwiema rękoma. W Entity Framework od początku nauki stosuję podejście CodeFirst – mam wrażenie większej kontroli nad aplikacją, wiem co się w niej dzieje, a ręcznie tworzenie encji też nie jest strasznie pracochłonne („.. i po co ci to? patrz, mam dbmlkę i tylko przeciągam tabelkę i już działa, a ty wszystko z palucha robisz”). Co do Bootstrapa – zazwyczaj robiłem aplikacje na wewnętrzne potrzeby firm, więc biblioteka pozwala zunifikować wszystkie intranetowe aplikacje, tabelki w każdej aplikacji wyglądają podobnie, przyciski również. A dla mnie odchodzi potrzeba zabawy z css-em.
    A za dwie pozostałe biblioteki dzięki, na pewno się zainteresuję

    • Kajetan Duszyński

      Spróbuj koniecznie naprawdę pomagają w pracy 🙂 A co do Bootstrapa w pracy to faktycznie o tym jego użyciu zapomniałem. Też bardzo często tak robię. Kiedyś stosowałem defaultowy szablon ASP.NET MVC, teraz jeszcze rozszerzony zostaje o elementy bootstrapowe.

  • Bootstrap jest niezbędny – przynajmniej dla takich ludzi jak ja, którzy sami sensownie strony nie pokolorują. 😉
    Jeśli chodzi o IoC, to zawsze używam Autofaca – maksimum działania przy minimalnej konfiguracji. Ale widzę, że ten SimpleInjector jest równie prosty. Ciekawe, czy wspiera też interceptory?
    W kwestii mapowania obiektów, to zamiast AutoMappera zawsze wolałem ValueInjecter – bo działa bez konfiguracji.
    Z kolei Entity Framework, który raptem 2 czy może 3 lata temu dorobił się wreszcie jedynego słusznego podejścia code first, to nie jest nic imponującego. Zwłaszcza, że brakuje w nim wielu rzeczy, przez co jest znacznie mniej funkcjonalny od NHibernate.

    • Kajetan Duszyński

      http://simpleinjector.readthedocs.org/en/latest/InterceptionExtensions.html – SimpleInjector oczywiście wspiera interceptory.
      NHibernate to tak jak już wcześniej wspominałem, nie przepadam za portami bibliotek dlatego nie mogę się do niego przekonać. EF działa na tyle na ile mi jest potrzebny dlatego nie myślę nad zmianą.
      A jeśli chodzi o ValueInjectera na pewno się przyjrzę. Dzięki 🙂

      • Czemu strona tego SimpleInjectora wygląda tak jak AutoFaca? To jakaś podróbka, czy co? 😀
        A mogę spytać jakie znaczenie dla Ciebie ma to, czy coś jest portem, czy nie?

        • Kajetan Duszyński

          Pewnie ten sam szablon użyty 🙂
          Porty w moim przypadku to kwestia tylko i wyłącznie siedząca w mojej głowie 😀 wiem, że mogą być równie dobre, a często nawet lepsze ale tak już mam i póki co nie narzekam.

          • No, NH zjada EF bez popitki chyba pod każdym względem, więc to trochę dziwne zakładać sobie samemu na ręce antyportowe kajdany. 🙂