{"id":111,"date":"2022-10-25T11:30:00","date_gmt":"2022-10-25T09:30:00","guid":{"rendered":"https:\/\/217.182.75.69\/blog-content\/?p=111"},"modified":"2022-10-25T11:35:28","modified_gmt":"2022-10-25T09:35:28","slug":"porownanie-spring-framework-i-aspnet-core-cz1-wprowadzenie","status":"publish","type":"post","link":"https:\/\/blog.michalch.pl\/index.php\/2022\/10\/25\/porownanie-spring-framework-i-aspnet-core-cz1-wprowadzenie\/","title":{"rendered":"Por\u00f3wnanie Spring Framework i ASP.NET Core cz.1: Wprowadzenie"},"content":{"rendered":"\n<p><em>Mo\u017cesz skomentowa\u0107 ten wpis w serwisach spo\u0142eczno\u015bciowych: Linkedin (<a rel=\"noreferrer noopener\" href=\"https:\/\/www.linkedin.com\/posts\/michalch-pl_por%C3%B3wnanie-spring-framework-i-aspnet-core-activity-6990606203881951232-Od1N\" data-type=\"URL\" data-id=\"https:\/\/www.linkedin.com\/posts\/michalch-pl_por%C3%B3wnanie-spring-framework-i-aspnet-core-activity-6990606203881951232-Od1N\" target=\"_blank\">przejd\u017a<\/a>) lub Facebook (<a href=\"https:\/\/www.facebook.com\/michalchpl\/posts\/pfbid0t86KZ5idHTtSadkfyZQeMVSrortEMMxXHJYwLEzWQZiqGjnvBQqCrzuXkbgSDG1Ml\" data-type=\"URL\" data-id=\"https:\/\/www.facebook.com\/michalchpl\/posts\/pfbid0t86KZ5idHTtSadkfyZQeMVSrortEMMxXHJYwLEzWQZiqGjnvBQqCrzuXkbgSDG1Ml\" target=\"_blank\" rel=\"noreferrer noopener\">przejd\u017a<\/a>).<\/em><\/p>\n\n\n\n<p>Na \u015bcie\u017cce rozwoju ka\u017cdej osoby, kt\u00f3ra chce si\u0119 zaj\u0105\u0107 programowaniem, pojawia si\u0119 w pewnym momencie kwestia wyboru technologii, z kt\u00f3rej chcia\u0142aby korzysta\u0107.<\/p>\n\n\n\n<p>Do najbardziej popularnych j\u0119zyk\u00f3w programowania nale\u017c\u0105 te obiektowe. W\u015br\u00f3d nich za\u015b prym wiod\u0105 Java i C#.<\/p>\n\n\n\n<p>Po pierwszym kontakcie z w.w. technologiami odnios\u0142em wra\u017cenie: Java i C# s\u0105 jak Coca-Cola i Pepsi. Tylko koneserzy rozpoznaj\u0105 r\u00f3\u017cnice. \ud83d\ude09 <\/p>\n\n\n\n<p>W ramach swojej pracy dyplomowej podj\u0105\u0142em si\u0119 por\u00f3wnania dw\u00f3ch popularnych framework\u00f3w stworzonych na bazie ka\u017cdego z tych j\u0119zyk\u00f3w, a mianowicie Spring Framework i ASP.NET Core.<\/p>\n\n\n\n<p>Springa po raz pierwszy opublikowano 1 pa\u017adziernika 2002 roku <sub><sup><a rel=\"noreferrer noopener\" href=\"https:\/\/pl.wikipedia.org\/wiki\/Spring_Framework\" data-type=\"URL\" data-id=\"https:\/\/pl.wikipedia.org\/wiki\/Spring_Framework\" target=\"_blank\">(\u017ar\u00f3d\u0142o)<\/a><\/sup><\/sub>, a obecnie jest ju\u017c dost\u0119pna pi\u0105ta wersja tego \u015brodowiska. Mia\u0142 by\u0107 alternatyw\u0105 dla stosowanej wcze\u015bniej technologii Enterprise Java Beans, kt\u00f3ra dla tworzenia ma\u0142ych aplikacji wymaga\u0142a podobnego nak\u0142adu pracy jak dla aplikacji du\u017cej. Obs\u0142uguje zasad\u0119 &#8222;odwr\u00f3cenia sterowania&#8221; (<em>Inversion of Control<\/em>) i &#8222;wstrzykiwania zale\u017cno\u015bci&#8221; (<em>Dependency Injection<\/em>), kt\u00f3re pozwalaj\u0105 na sterowanie aplikacj\u0105 (np. konstruowanie zapyta\u0144 HTTP) z poziomu frameworka &#8211; programista jedynie dokonuje odpowiedniej konfiguracji. W przypadku wykorzystania Spring Boot tak\u017ce i to nie jest konieczne (istnieje zestaw konfiguracji domy\u015blnych), ale o tym innym razem. Mo\u017cliwe jest tak\u017ce przekazywanie zale\u017cno\u015bci przy pomocy gotowych instancji obiekt\u00f3w, jako argument konstruktora albo poprzez przypisanie w\u0142asciwo\u015bci (pola) danego obiektu w postaci metody <em>setter<\/em>. Dzi\u0119ki tej funkcjonalno\u015bci mo\u017cna przygotowa\u0107 kilka implementacji tego samego interfejsu, a programista korzystaj\u0105cy z takiego rozwi\u0105zania mo\u017ce wybra\u0107 preferowan\u0105 implementacj\u0119 lub te\u017c napisa\u0107 w\u0142asn\u0105 (wzorzec projektowy &#8222;<em>most<\/em>&#8222;).<\/p>\n\n\n\n<p>Spring posiada wiele modu\u0142\u00f3w. Podstawowa cz\u0119\u015b\u0107 frameworka zgrupowana jest w module <em>Spring Core<\/em>, <em>Spring Web<\/em> i <em>Spring Web MVC<\/em> zapewnia warstw\u0119 do obs\u0142ugi aplikacji sieciowych, <em>Spring Security<\/em> obejmuje kontrol\u0119 dost\u0119pu do zasob\u00f3w i kwestie uwierzytelniania. S\u0105 te\u017c modu\u0142y odpowiedzialne za komunikacj\u0119 z bazami danych, np. Spring DAO, Spring Data, Spring ORM czy Spring Hibernate, jak r\u00f3wnie\u017c <em>Spring Cloud,<\/em> zapewniaj\u0105cy wsparcie dla komunikacji z platformami chmurowymi.<br>Cz\u0119sto stosowanym rozwi\u0105zaniem jest <em>Spring Boot<\/em>, posiadaj\u0105cy zestaw gotowych konfiguracji Springa, a tak\u017ce wbudowany serwer do uruchamiania aplikacji.<\/p>\n\n\n\n<p>Pierwsza wersja ASP.NET tak\u017ce zosta\u0142a opublikowana w 2002 roku (5 stycznia), <sup>(<a rel=\"noreferrer noopener\" href=\"https:\/\/en.wikipedia.org\/wiki\/ASP.NET\" data-type=\"URL\" data-id=\"https:\/\/en.wikipedia.org\/wiki\/ASP.NET\" target=\"_blank\">\u017cr\u00f3d\u0142o<\/a>)<\/sup> a jego korzenie si\u0119gaj\u0105 2000 roku i projektu ASP+. <sup>(<a rel=\"noreferrer noopener\" href=\"https:\/\/pl.wikipedia.org\/wiki\/ASP.NET\" data-type=\"URL\" data-id=\"https:\/\/pl.wikipedia.org\/wiki\/ASP.NET\" target=\"_blank\">\u017ar\u00f3d\u0142o<\/a>)<\/sup> Jednak przez wiele lat by\u0142o to oprogramowanie o zamkni\u0119tym kodzie \u017ar\u00f3d\u0142owym, a jego w pe\u0142ni sprawne wykonywanie mo\u017cliwe by\u0142o jedynie w systemach operacyjnych Windows. Powsta\u0142o wprawdzie Mono \u2013 implementacja .NET na systemy Linuxowe, jednak nie posiada ona pe\u0142nej zgodno\u015bci i pojawiaj\u0105 si\u0119 b\u0142\u0119dy w dzia\u0142aniu.<\/p>\n\n\n\n<p>Dopiero w 2016 roku opublikowano pierwsz\u0105 wersj\u0119 ASP.NET Core, umo\u017cliwiaj\u0105cej dzia\u0142anie na r\u00f3\u017cnych systemach operacyjnych, tak\u017ce Linuxowych. Przy okazji jej stworzenia, Microsoft przebudowa\u0142 \u015brodowisko, usuwaj\u0105c cz\u0119\u015b\u0107 bibliotek, kt\u00f3re by\u0142y przestarza\u0142e lub u\u017cywa\u0142y funkcji specyficznych dla platformy systemowej Windows. Od czasu powstania wersji Core, kod \u017ar\u00f3d\u0142owy frameworka jest dost\u0119pny publicznie na platformie Github, co wg mnie jest bardzo wa\u017cn\u0105 zmian\u0105, pozwalaj\u0105c\u0105 na pe\u0142niejsze badanie, dlaczego system dzia\u0142a w taki a nie inny spos\u00f3b. Powsta\u0142 tak\u017ce .NET Core CLI, umo\u017cliwiaj\u0105cy obs\u0142ug\u0119 z linii polece\u0144 (konsoli systemowej), m.in. kompilacj\u0119 kodu i uruchamianie aplikacji.<br>W przeciwie\u0144stwie do Springa, jest to rozwi\u0105zanie stworzone i polecane przez producenta j\u0119zyka C#, podczas gdy Spring jest rozwi\u0105zaniem alternatywnym.<\/p>\n\n\n\n<p>W dalszej cz\u0119\u015bci pracy dyplomowej por\u00f3wnywa\u0142em kolejne elementy aplikacji sieciowej, m.in. kontrolery, warstw\u0119 dost\u0119pu do danych, kwesti\u0119 uwierzytelniania i autoryzacji i inne, sprawdzaj\u0105c jak dane rzeczy robi si\u0119 w Springu, a jak w ASP.NET, jakie mo\u017cliwo\u015bci s\u0105 dost\u0119pne. Czasami poszukiwa\u0142em dodatkowych bibliotek wspieraj\u0105cych dane funkcjonalno\u015bci. Zdarza\u0142a si\u0119 tak\u017ce analiza wybranych fragment\u00f3w kodu \u017ar\u00f3d\u0142owego samych framework\u00f3w.<\/p>\n\n\n\n<p>Najciekawsze elementy b\u0119d\u0105 stopniowo publikowane na niniejszej stronie internetowej.<\/p>\n\n\n\n<p><em>Mo\u017cesz skomentowa\u0107 ten wpis w serwisach spo\u0142eczno\u015bciowych: Linkedin (<a rel=\"noreferrer noopener\" href=\"https:\/\/www.linkedin.com\/posts\/michalch-pl_por%C3%B3wnanie-spring-framework-i-aspnet-core-activity-6990606203881951232-Od1N\" data-type=\"URL\" data-id=\"https:\/\/www.linkedin.com\/posts\/michalch-pl_por%C3%B3wnanie-spring-framework-i-aspnet-core-activity-6990606203881951232-Od1N\" target=\"_blank\">przejd\u017a<\/a>) lub Facebook (<a rel=\"noreferrer noopener\" href=\"https:\/\/www.facebook.com\/michalchpl\/posts\/pfbid0t86KZ5idHTtSadkfyZQeMVSrortEMMxXHJYwLEzWQZiqGjnvBQqCrzuXkbgSDG1Ml\" data-type=\"URL\" data-id=\"https:\/\/www.facebook.com\/michalchpl\/posts\/pfbid0t86KZ5idHTtSadkfyZQeMVSrortEMMxXHJYwLEzWQZiqGjnvBQqCrzuXkbgSDG1Ml\" target=\"_blank\">przejd\u017a<\/a>).<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mo\u017cesz skomentowa\u0107 ten wpis w serwisach spo\u0142eczno\u015bciowych: Linkedin (przejd\u017a) lub Facebook (przejd\u017a). Na \u015bcie\u017cce rozwoju ka\u017cdej osoby, kt\u00f3ra chce si\u0119 zaj\u0105\u0107 programowaniem, pojawia si\u0119 w pewnym momencie kwestia wyboru technologii, z kt\u00f3rej chcia\u0142aby korzysta\u0107. Do najbardziej popularnych j\u0119zyk\u00f3w programowania nale\u017c\u0105 te obiektowe. W\u015br\u00f3d nich za\u015b prym wiod\u0105 Java i C#. Po pierwszym kontakcie z w.w. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.michalch.pl\/index.php\/wp-json\/wp\/v2\/posts\/111"}],"collection":[{"href":"https:\/\/blog.michalch.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.michalch.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.michalch.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.michalch.pl\/index.php\/wp-json\/wp\/v2\/comments?post=111"}],"version-history":[{"count":7,"href":"https:\/\/blog.michalch.pl\/index.php\/wp-json\/wp\/v2\/posts\/111\/revisions"}],"predecessor-version":[{"id":143,"href":"https:\/\/blog.michalch.pl\/index.php\/wp-json\/wp\/v2\/posts\/111\/revisions\/143"}],"wp:attachment":[{"href":"https:\/\/blog.michalch.pl\/index.php\/wp-json\/wp\/v2\/media?parent=111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.michalch.pl\/index.php\/wp-json\/wp\/v2\/categories?post=111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.michalch.pl\/index.php\/wp-json\/wp\/v2\/tags?post=111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}