{"id":31352,"date":"2020-07-15T08:18:26","date_gmt":"2020-07-15T06:18:26","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/wzorce-projektowe-w-systemach-e-commerce\/"},"modified":"2024-11-07T15:18:14","modified_gmt":"2024-11-07T14:18:14","slug":"wzorce-projektowe-w-systemach-e-commerce","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/wzorce-projektowe-w-systemach-e-commerce\/","title":{"rendered":"Wzorce projektowe w systemach e-commerce"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\">Przejd\u017a do:<\/p>\n    <ol>\n                    <li><a href=\"#E-commerce-od-czego-zaczac\">1.  E-commerce \u2013 od czego zacz\u0105\u0107?<\/a><\/li>\n                    <li><a href=\"#Nikt-nie-obiecywal-ze-bedzie-latwo\">2.  Nikt nie obiecywa\u0142, \u017ce b\u0119dzie \u0142atwo<\/a><\/li>\n                    <li><a href=\"#Najwazniejsze-wzorce-projektowe-w-e-commerce\">3.  Najwa\u017cniejsze wzorce projektowe w e-commerce<\/a><\/li>\n                    <li><a href=\"#Pomysle-o-tym-pozniej-czyli-antywzorce-projektowe\">4.  Pomy\u015bl\u0119 o tym p\u00f3\u017aniej \u2013 czyli antywzorce projektowe<\/a><\/li>\n                    <li><a href=\"#Podsumowanie\">5.  Podsumowanie<\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"E-commerce-od-czego-zaczac\">E-commerce \u2013 od czego zacz\u0105\u0107?<\/h2>\n\n\n\n<p>Pr\u00f3g wej\u015bcia w przypadku programowania system\u00f3w e-commerce, ze wzgl\u0119du na ich z\u0142o\u017cono\u015b\u0107, jest du\u017co wi\u0119kszy ni\u017c w przypadku pisania systemu od podstaw. \u017beby zacz\u0105\u0107 rozwija\u0107 tak\u0105 aplikacj\u0119, potrzebne s\u0105 wi\u0119c spora wiedza i do\u015bwiadczenie. Tworz\u0105c taki system, mo\u017cna du\u017c\u0105 cz\u0119\u015b\u0107 funkcjonalno\u015bci pokry\u0107 funkcjami \u201cout of the box\u201d, jakich nam dostarcza jego wersja domy\u015blna. Natomiast modyfikacje takiego systemu wymagaj\u0105 ju\u017c sporej wiedzy na temat jego budowy i funkcjonowania.<\/p>\n\n\n\n<p><strong>Prac\u0119 nad aplikacj\u0105 e-commerce dobrze jest zacz\u0105\u0107 od szkolenia z zakresu programowania w danej technologii. W ten spos\u00f3b zdobywamy podstawow\u0105 wiedz\u0119 na temat dobrych praktyk programowania w projekcie.<\/strong> Cz\u0119sto zdarza si\u0119, \u017ce systemy e-commerce wykorzystuj\u0105 gotowe frameworki s\u0142u\u017c\u0105ce do pisania aplikacji. Z\u0142o\u017cono\u015b\u0107 takich system\u00f3w jest du\u017ca, jednak owocuje to korzy\u015bciami dla programist\u00f3w i u\u017cytkownik\u00f3w. Otrzymujemy pot\u0119\u017cne aplikacje, kt\u00f3re s\u0105 bardzo elastyczne oraz maj\u0105 spore mo\u017cliwo\u015bci konfiguracyjne dla u\u017cytkownika obs\u0142uguj\u0105cego je od zaplecza.<\/p>\n\n\n\n<p><strong>Czytaj tak\u017ce: <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/frameworkowe-wojny\">Frameworkowe wojny<\/a><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Nikt-nie-obiecywal-ze-bedzie-latwo\">Nikt nie obiecywa\u0142, \u017ce b\u0119dzie \u0142atwo\u2026<\/h2>\n\n\n\n<p>Poruszanie si\u0119 w g\u0105szczu wzorc\u00f3w nie nale\u017cy do naj\u0142atwiejszych. Ponadto jedna funkcjonalno\u015b\u0107 mo\u017ce wp\u0142ywa\u0107 na drug\u0105 i trzeba wcze\u015bniej upewnia\u0107 si\u0119 co do wdra\u017canych modyfikacji w systemie. Warto te\u017c pami\u0119ta\u0107, \u017ce wszystkie modyfikacje nale\u017cy wykonywa\u0107 zgodnie z zasadami. <strong>Dlatego w\u0142a\u015bnie moim zdaniem utrzymywanie system\u00f3w e-commerce jest trudniejsze ni\u017c ich pisanie.<\/strong><\/p>\n\n\n\n<p><strong>Du\u017ce systemy e-commerce napisane w technologii PHP, takie jak Magento czy Shopware, korzystaj\u0105 z bibliotek Symfony i Zend.<\/strong> Na rynku mamy wiele podobnych rozwi\u0105za\u0144 gotowych do instalacji i rozbudowy. Niekt\u00f3re systemy oferuj\u0105 wprawdzie wersj\u0119 enterprise dla bardziej wymagaj\u0105cych klient\u00f3w, jednak licencja jest zazwyczaj kosztowna i przeznaczona dla du\u017cych system\u00f3w. Warto wi\u0119c rozwa\u017cy\u0107 kastomizacj\u0119, kt\u00f3ra b\u0119dzie ta\u0144sza i b\u0119dzie w pe\u0142ni spe\u0142nia\u0107 wymagania naszej firmy.&nbsp;<strong>Co wa\u017cne, na rynku narz\u0119dzi e-commerce zacz\u0119\u0142y si\u0119 ju\u017c pojawia\u0107 systemy, kt\u00f3re mo\u017cna \u0142atwo skalowa\u0107 w chmurze AWS, Google Cloud lub Azure.<\/strong> Idealnie wi\u0119c jest mie\u0107 rozwi\u0105zanie, kt\u00f3re pozwala na migracj\u0119 pomi\u0119dzy chmurami.&nbsp;Aby stworzy\u0107 tak skomplikowany system, trzeba trzyma\u0107 si\u0119 sztywnych regu\u0142 pisania aplikacji. Jak wi\u0119c u\u0142atwi\u0107 sobie prac\u0119? <\/style><div class=\"promotion-box promotion-box--image-left \"><div class=\"tiles latest-news-once\"><div class=\"tile\"><div class=\"tile-image\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2022\/12\/nearshore_2022.12.01_cover.jpg\" alt=\"\" title=\"\"><\/div><div class=\"tile-content\"><p class=\"entry-title client-name\">EXPERT KNOWLEDGE<\/p>\r\n\r\n<h3>Read on to discover the importance of Scrum's value of respect.<\/h3>\r\n<h3><a class=\"btn btn-primary\" href=\"https:\/\/nearshore-it.eu\/articles\/best-practices\/scrum-values-respect-in-scrum&quot;\" target=\"_blank\" rel=\"noopener\">Read article<\/a><\/h3><\/div><\/div><\/div><\/div><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Najwazniejsze-wzorce-projektowe-w-e-commerce\">Najwa\u017cniejsze wzorce projektowe w e-commerce<\/h2>\n\n\n\n<p>Wzorc\u00f3w projektowych w pisaniu system\u00f3w informatycznych jest mn\u00f3stwo i nie chcia\u0142bym si\u0119 skupia\u0107 na wymienianiu wszystkich. Postaram si\u0119 przybli\u017cy\u0107 najwa\u017cniejsze z nich, kt\u00f3re przynosz\u0105 najwi\u0119ksze korzy\u015bci pod wzgl\u0119dem jako\u015bci kodu. Oto kilka wzorc\u00f3w projektowych, bez kt\u00f3rych stworzenie jakiejkolwiek aplikacji komercyjnej by\u0142oby wr\u0119cz niemo\u017cliwe. <\/p>\n\n\n\n<p>Wyr\u00f3\u017cniamy trzy rodzaje wzorc\u00f3w projektowych:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kreacyjne<\/h3>\n\n\n\n<p>Opisuj\u0105 one procesy tworzenia nowych obiekt\u00f3w, do ich zada\u0144 nale\u017c\u0105 tak\u017ce wszelkie czynno\u015bci zwi\u0105zane z ich konfiguracj\u0105 oraz tworzeniem typ\u00f3w danych.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><em>Property<\/em> <\/strong>\u2013 to najbardziej podstawowy z wzorc\u00f3w kreacyjnych. S\u0142u\u017cy g\u0142\u00f3wnie do przetrzymywania konfiguracji, jest to bardzo wa\u017cne ze wzgl\u0119du na to, \u017ce eliminuje ryzyko duplikowania warto\u015bci konfiguruj\u0105cych oraz u\u0142atwia p\u00f3\u017aniejsze modyfikacje i utrzymywanie kodu.<\/li>\n\n\n\n<li><em><strong>Abstract factory<\/strong> <\/em>\u2013 jest wzorcem, kt\u00f3ry mo\u017ce pos\u0142u\u017cy\u0107 w budowaniu aplikacji, okre\u015bla on interfejs do tworzenia r\u00f3\u017cnych obiekt\u00f3w nale\u017c\u0105cych do tego samego typu (domeny).<\/li>\n\n\n\n<li><strong><em>Factory method<\/em><\/strong> \u2013 jest podobnym wzorcem do abstract factory. R\u00f3wnie\u017c okre\u015bla interfejs, z tym, \u017ce odnosi si\u0119 do r\u00f3\u017cnych metod zamiast obiekt\u00f3w.<br><h3>Strukturalne<\/h3> Definiuj\u0105 struktury powi\u0105zanych ze sob\u0105 obiekt\u00f3w. <\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong style=\"font-size: 16px;\"><em>Adapter<\/em> <\/strong><span style=\"font-size: 16px;\">\u2013 to przyk\u0142ad wzorca strukturalnego, kt\u00f3ry mo\u017ce pos\u0142u\u017cy\u0107 obs\u0142ugi niezgodnych interfejs\u00f3w w obiektach. Jego zadaniem w takim przypadku jest umo\u017cliwienie komunikacji takich obiekt\u00f3w.<\/span><\/li>\n\n\n\n<li><em><strong>Facade<\/strong> <\/em>\u2013 to kolejny wzorzec strukturalny. Przechowuje on map\u0119 obiekt\u00f3w wraz z mo\u017cliwo\u015bci\u0105 ich obs\u0142u\u017cenia. Implementacja tego wzorca mo\u017ce odby\u0107 si\u0119 przez stworzenie klasy oraz osadzenie w niej wszystkich obiekt\u00f3w, kt\u00f3re realizuj\u0105 konkretn\u0105 logik\u0119 aplikacji. <br><h3>Czynno\u015bciowe<\/h3><p>Opisuj\u0105 wzajemne zale\u017cno\u015bci pomi\u0119dzy obiektami.<\/p><\/li>\n\n\n\n<li><strong><em>Observer<\/em> <\/strong>\u2013 to jeden z popularnych wzorc\u00f3w czynno\u015bciowych. S\u0142u\u017cy on do obs\u0142ugi zdarze\u0144 w aplikacjach i dzi\u0119ki niemu aplikacj\u0119 mo\u017cna \u0142atwo rozszerza\u0107. Przyk\u0142adem takiego zdarzenia w systemie e-commerce mo\u017ce by\u0107 moment wystawienia faktury za transakcj\u0119. Przyk\u0142adowo, programista w zale\u017cno\u015bci od wymog\u00f3w biznesu mo\u017ce zaprogramowa\u0107 jak\u0105\u015b akcj\u0119 po wystawieniu faktury, np. dodatkowe powiadomienie dla pracownika sklepu.<\/li>\n\n\n\n<li><strong><em>Dependency injection<\/em> <\/strong>\u2013 kolejnym wzorcem czynno\u015bciowym jest dependency injection. Polega on na \u201ewstrzykiwaniu\u201d zale\u017cno\u015bci jednego obiektu do drugiego oraz wykonywanie na nim operacji, na podstawie kt\u00f3rych jest realizowana logika aplikacji. Pozwala na usuwanie zale\u017cno\u015bci pomi\u0119dzy danymi komponentami.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Pomysle-o-tym-pozniej-czyli-antywzorce-projektowe\">Pomy\u015bl\u0119 o tym p\u00f3\u017aniej \u2013 czyli antywzorce projektowe<\/h2>\n\n\n\n<p>Pisz\u0105c o wzorcach w e-commerce, chcia\u0142bym wspomnie\u0107 tak\u017ce o antywzorcach projektowych, kt\u00f3rych r\u00f3wnie\u017c jest sporo.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em><strong>Gold plating<\/strong> \u2013 <\/em>ciekawym antywzorcem projektowym jest gold plating, czyli tzw. z\u0142ocenie. Mamy z nim do czynienie w sytuacji, gdy prace nad projektem lub zadaniem trwaj\u0105 d\u0142u\u017cej, ni\u017c jest to wymagane (np. z powodu ci\u0105g\u0142ego ulepszania funkcjonalno\u015bci i ch\u0119ci dostarczenia klientowi jeszcze lepszego produktu). W pewnym momencie zostaje jednak przekroczony punkt krytyczny, w kt\u00f3rym dodatkowy wysi\u0142ek nie przynosi warto\u015bci dodanej w projekcie.<\/li>\n\n\n\n<li><strong><em>We\u2019ll handle it later<\/em><\/strong><em> \u2013 <\/em>przyk\u0142adem r\u00f3wnie skrajnym jest wspomniane <em>we\u2019ll handle it later, <\/em>czyli tzw. \u201eNa tym etapie bym si\u0119 tym nie przejmowa\u0142\u201d. Antywzorzec ten stosowany jest, gdy analiza danego zadania lub projektu nie zosta\u0142a wykonana prawid\u0142owo lub nie zosta\u0142a przeprowadzona w og\u00f3le.<\/li>\n\n\n\n<li><strong><em>U mnie dzia\u0142a<\/em><\/strong> \u2013 kto z nas nie s\u0142ysza\u0142 cho\u0107 raz w \u017cyciu \u201eU mnie dzia\u0142a?\u201d. To cz\u0119sto spotykane stwierdzenie mo\u017cna cz\u0119sto spotka\u0107 przy uruchomieniu aplikacji na r\u00f3\u017cnych systemach operacyjnych lub przy w r\u00f3\u017cnych \u015brodowiskach klienckich. A przecie\u017c warto zbada\u0107 ka\u017cde zg\u0142oszenie \u2013 ignorowanie problem\u00f3w na pocz\u0105tkowym etapie mo\u017ce mie\u0107 dalsze konsekwencje na p\u00f3\u017aniejszych etapach projekt\u00f3w.<\/li>\n\n\n\n<li><strong><em>Hard code<\/em><\/strong> \u2013 tzw. umieszczenie w kodzie tej samej zmiennej w kilku miejscach, co drastycznie wp\u0142ywa na p\u00f3\u017aniejsze utrzymanie takiej aplikacji.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Podsumowanie\">Podsumowanie<\/h2>\n\n\n\n<p>Systemy e-commerce nie trac\u0105 na popularno\u015bci i daj\u0105 du\u017ce mo\u017cliwo\u015bci zar\u00f3wno u\u017cytkownikom, jak i programistom. Aby nie pogubi\u0107 si\u0119 w ich z\u0142o\u017cono\u015bci i w pe\u0142ni wykorzysta\u0107 ich potencja\u0142, warto wystrzega\u0107 si\u0119 opisanych przeze mnie antywzorc\u00f3w i pog\u0142\u0119bia\u0107 swoj\u0105 wiedz\u0119 na temat dobrych praktyk. Nie tylko w programowaniu przek\u0142adaj\u0105 si\u0119 one na najlepsze rezultaty. Mam nadziej\u0119, \u017ce opisane przeze mnie przyk\u0142adowe wzorce zach\u0119c\u0105 Was do poznania kolejnych i stosowania ich w projektach. <\/style><div class=\"promotion-box promotion-box--image-left \"><div class=\"tiles latest-news-once\"><div class=\"tile\"><div class=\"tile-content\"><\/div><\/div><\/div><\/div><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Systemy e-commerce charakteryzuj\u0105 si\u0119 du\u017c\u0105 z\u0142o\u017cono\u015bci\u0105. Dzi\u0119ki niej jednak programi\u015bci zyskuj\u0105 bardzo du\u017c\u0105 elastyczno\u015b\u0107 w projektowaniu. Aby system by\u0142 czytelny dla programisty, ka\u017cda aplikacja e-commerce powinna powstawa\u0107 w oparciu o og\u00f3lnie przyj\u0119te wzorce projektowe. W dzisiejszym tek\u015bcie chcia\u0142bym przybli\u017cy\u0107 dobre praktyki i opisa\u0107 wybrane wzorce, ale i przestrzec przed antywzorcami, kt\u00f3re te\u017c niestety czasami si\u0119 pojawiaj\u0105.<\/p>\n","protected":false},"author":89,"featured_media":31353,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":12,"footnotes":""},"categories":[1,582],"tags":[572,573],"offering":[514,513,516],"class_list":["post-31352","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-e-commerce","tag-php-pl","offering-ams","offering-application-development","offering-cloud-engineering"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31352","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/89"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=31352"}],"version-history":[{"count":4,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31352\/revisions"}],"predecessor-version":[{"id":33948,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31352\/revisions\/33948"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/31353"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=31352"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=31352"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=31352"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=31352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}