<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	 xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>PHP &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<atom:link href="https://nearshore-it.eu/pl/tag/php-pl/feed/" rel="self" type="application/rss+xml" />
	<link>https://nearshore-it.eu/pl/</link>
	<description>We are Nearshore Software Development Company with 14years of experience in delivering a large scale IT projects in the areas of PHP, JAVA, .NET, BI and MDM.</description>
	<lastBuildDate>Thu, 07 Nov 2024 14:36:53 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://nearshore-it.eu/wp-content/uploads/2023/01/cropped-inetum-favicon-300x300-1-32x32.png</url>
	<title>PHP &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<link>https://nearshore-it.eu/pl/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Zapomnij o legacy code, czyli refaktoryzacja kodu PHP z wykorzystaniem Rector</title>
		<link>https://nearshore-it.eu/pl/artykuly/refaktoryzacja-kodu-php-z-rector/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/refaktoryzacja-kodu-php-z-rector/#respond</comments>
		
		<dc:creator><![CDATA[Marek Karmelski]]></dc:creator>
		<pubDate>Wed, 02 Mar 2022 07:08:00 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/refaktoryzacja-kodu-php-z-rector/</guid>

					<description><![CDATA[Praca z kodem otrzymanym „w spadku" lub z kodem jeszcze nieprzetestowanym może rodzić wiele obaw. Nie zawsze pozbycie się takiego kodu jest możliwe, często w pewnym momencie potrzebna jest refaktoryzacja za pomocą odpowiednich narzędzi. Już od ponad 15 lat programiści PHP mogą wykorzystywać rozwiązania, które ułatwiają walkę z legacy code w codziennej pracy. Ale czym właściwie jest legacy code i jak z nim pracować? Jak pozbyć się długu technologicznego? W niniejszym artykule chciałbym przybliżyć wam narzędzie, jakim jest Rector.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title"></p>
    <ol>
                    <li><a href="#Legacy-code-co-to-takiego">1.  Legacy code – co to takiego?</a></li>
                    <li><a href="#Legacy-code-co-zrobić-z-takim-kodem">2.  Legacy code – co zrobić z takim kodem?</a></li>
                    <li><a href="#Refactoring-kodu-narzędzia">3.  Refactoring kodu – narzędzia</a></li>
                    <li><a href="#Rector-PHP-pogromca-legacy-code">4.  Rector PHP – pogromca legacy code?</a></li>
                    <li><a href="#Refaktoryzacja-jakie-mamy-możliwości-w-takim-przypadku">5.  Refaktoryzacja – jakie mamy możliwości w takim przypadku?</a></li>
                    <li><a href="#Zmiana-architektury-kodu">6.  Zmiana architektury kodu</a></li>
                    <li><a href="#Dlaczego-Rector-a-nie-IDE">7.  Dlaczego Rector, a nie IDE?</a></li>
                    <li><a href="#Rector-konfiguracja">8.  Rector – konfiguracja</a></li>
                    <li><a href="#podsumowanie">9.  Rector a kod legacy – podsumowanie</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Legacy-code-co-to-takiego">Legacy code – co to takiego?</h2>



<p>Zanim przejdę do opisania możliwości Rectora, chciałbym w kilku zdaniach nakreślić, czym jest legacy code i jakie są najczęściej wybierane sposoby radzenia sobie z tymże problemem. W sieci trafimy na wiele definicji legacy code. W dosłownym tłumaczeniu legacy code oznacza nic innego, jak <strong>„kod dziedziczony”, </strong>czyli kod, który de facto otrzymujemy w spadku po innych programistach, na przykład w momencie dołączenia do nowego projektu. Taki kod budzi lęki i obawy – kod działa, lecz nie znamy jego zawiłej logiki. Szczególny postrach sieje trudny do zrozumienia i okiełznania spaghetti code. Legacy code to również <strong>kod, który… piszemy w danej chwili,</strong> ale nie został jeszcze pokryty testami, zatem nie jest przygotowany na zmiany w przyszłości. Według mnie każda z powyższych definicji opisuje istotę problemu.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.03.02_graphic1.png" alt="kod legacy to też kod pisany pod nową funkcjonalność" class="wp-image-63366" title="Zapomnij o legacy code, czyli refaktoryzacja kodu PHP z wykorzystaniem Rector 1"></figure>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Legacy-code-co-zrobić-z-takim-kodem">Legacy code – co zrobić z takim kodem?</h2>



<p>W pracy z legacy code mamy do wyboru podejścia, które<strong> albo minimalizują jego wystąpienie, albo usuwają taki kod całkowicie.</strong> Możemy zatem zastosować takie rozwiązania jak refactoring kodu lub całkowicie go przepisać. Refactoring kodu dotyczy optymalizacji jego małych fragmentów, bez zmiany podstawowej funkcjonalności, drugie podejście wymaga przepisania całego kodu aplikacji na nowo, z uwzględnieniem aktualnych standardów.</p>



<p><strong>Przeczytaj także:</strong></p>



<ul class="wp-block-list">
<li><a href="https://nearshore-it.eu/pl/artykuly/clean-architecture/" target="_blank" rel="noreferrer noopener">Clean Architecture</a></li>



<li><a href="https://nearshore-it.eu/pl/artykuly/testy-bdd-czy-naprawde-sa-potrzebne/" target="_blank" rel="noreferrer noopener">Behavior-Driven Development</a></li>



<li><a href="https://nearshore-it.eu/pl/artykuly/test-driven-development-na-co-dzien/" target="_blank" rel="noreferrer noopener">Test-Driven Development</a></li>
</ul>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Refactoring-kodu-narzędzia">Refactoring kodu – narzędzia</h2>



<p>Jak już wspomniałem we wstępie, mamy obecnie wiele narzędzi umożliwiających walkę z długiem technologicznym w kodzie PHP. Wśród narzędzi do refaktoryzacji można wymienić takie jak:</p>



<ul class="wp-block-list">
<li>PHP_CodeSniffer,</li>



<li>PHP CS Fixer,</li>



<li>PHP-Parser,</li>



<li>PHPStan,</li>



<li>Psalm,</li>



<li>Rector.</li>
</ul>



<p>Które z narzędzi wybrać? Wszystko zależy od tego, czego zespół programistów potrzebuje w danym momencie oraz tego, czy narzędzie spełnia nasze oczekiwania. Jednym z decydujących czynników będzie też znajomość danego narzędzia przez członków zespołu developerskiego. Jedne z powyższych narzędzi przeprowadzają analizę statyczną kodu, drugie modyfikują go zgodnie z aktualnymi standardami, a jeszcze inne umożliwiają obie te rzeczy – tak jak właśnie Rector.</p>



<h2 class="wp-block-heading" id="Rector-PHP-pogromca-legacy-code">Rector PHP – pogromca legacy code?</h2>



<p>Rector pojawił się w 2017 roku, a inicjatorem jego powstania był Tomasa Votruba. Rector to program CLI (Command Line Interface) na licencji open source, oparty na &nbsp;komponentach </p>



<p>Symfony. To narzędzie, które poza analizą statyczną kodu dokonuje też jego zmiany. Podstawowe zastosowania Rectora to sprawna i szybka aktualizacja i refaktoryzacja kodu, a także zmiana architektury aplikacji.</p>



<h2 class="wp-block-heading" id="Refaktoryzacja-jakie-mamy-możliwości-w-takim-przypadku">Refaktoryzacja – jakie mamy możliwości w takim przypadku?</h2>



<p>W przypadku aktualizacji i refaktoryzacji możemy tutaj wymienić takie możliwości jak:</p>



<ul class="wp-block-list">
<li>migracja z PHP 5.3 do PHP 8.1, &nbsp;</li>



<li>migracja z Symfony 2.8 do Symfony 4.4, &nbsp;</li>



<li>usuwanie tzw. martwego kodu (ang. <em>dead code, </em>czyli kodu, który nigdy nie będzie wykorzystany),</li>



<li>zmiana nazw klas, metod, parametrów.<br></li>
</ul>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.03.02_graphic2.png" alt="dobra wiadomość - można opanować kod legacy " class="wp-image-63374" title="Zapomnij o legacy code, czyli refaktoryzacja kodu PHP z wykorzystaniem Rector 2"></figure></div>


<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Zmiana-architektury-kodu">Zmiana architektury kodu</h2>



<p>Co do zmian architektury, zmiana fasady w Laravel na DI czy przeniesienie aplikacji z TYPO3 na Symfony. Oczywiście współczesne IDE umożliwiają refaktoryzację kodu, jednak mogą działać wolno i być skomplikowane w obsłudze. W przypadku wykorzystywania wyrażeń regularnych do wyszukiwania fragmentów kodu mogą znajdować nie wszystkie wystąpienia lub wręcz przeciwnie – wyszukiwać znacznie więcej. Kopiowanie i wklejanie przez programistę także może być obarczone pewnym błędem wynikającym ze zmęczenia czy rozkojarzenia.</p>



<h2 class="wp-block-heading" id="Dlaczego-Rector-a-nie-IDE">Dlaczego Rector, a nie IDE?</h2>



<p>Rector nie zrobi nic, na co nie pozwoli programista! Opiera się na regułach (to zdefiniowane, pojedyncze „przepisy”, które dokonują pojedynczej zmiany w kodzie), zgrupowanych w zestawy reguł wykonujących zmiany o zbliżonej charakterystyce. </p>



<p><span style="text-decoration: underline;">Pojedyncze reguły:</span></p>



<ul class="wp-block-list">
<li>ArrayKeyFirstLastRector,</li>



<li>IsCountableRector,</li>



<li>JsonThrowOnErrorRector.</li>
</ul>



<p><span style="text-decoration: underline;">Zestawy reguł:</span></p>



<ul class="wp-block-list">
<li>PSR4, &nbsp;&nbsp;&nbsp;</li>



<li>Php70,</li>



<li>Php71,&nbsp;TypeDeclaration,</li>



<li>DowngradePhp71.</li>
</ul>



<p>W momencie pisania artykułu Rector udostępniał około <strong>660 reguł, zebranych w ponad 48 zestawów.</strong></p>



<h2 class="wp-block-heading" id="Rector-konfiguracja">Rector – konfiguracja</h2>



<p>Zasada działania Rectora jest bardzo prosta – zaczynamy od zainstalowania narzędzia i jego konfiguracji. Rector w pierwszej kolejności wyszukuje wszystkie pliki wskazane przez programistę, następnie, analizując każdy z nich z osobna,<strong> buduje dla nich AST </strong>(Abstract Syntax Tree), tzw. drzewo abstrakcji składniowej. Do każdego takiego drzewa stosuje zdefiniowane przez programistę w pliku konfiguracyjnym reguły. Gdy cały proces zostanie przeprowadzony, w konsoli otrzymujemy raport dotyczący naniesionych zmian. Warto wspomnieć, że <strong>Rector nie opiera się wyłącznie na domyślnych regułach – narzędzie umożliwia tworzenie własnych, bardziej wyspecjalizowanych.&nbsp;</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">/** @var SplFileInfo[] $fileInfos */
foreach ($fileInfos as $fileInfo)  {
    // 1 file => nodes
    /** @var Parser $phpParser */
    $nodes = $phpParser->parse(file_get_contents($fileInfo->getRealPath()));
    // nodes => 1 node
    foreach ($nodes as $node) { // rather traverse all of them
        /** @var PhpRectorInterface[] $rectors */
        foreach ($rectors as $rector)  {
            foreach ($rector->getNodeTypes() as $nodeType)  {
                if (is_a($node, $nodeType, true))  {
                    $rector->refactor($node);
                }
            }
        }
    }
}
</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">return static function (
    ContainerConfigurator $containerConfigurator
): void {
    // get parameters
    $parameters = $containerConfigurator->parameters();
    $parameters->set(Option::PATHS, [
        __DIR__ . '/src'
    ]);
    // Define what rule sets will be applied
    $containerConfigurator->import(SetList::CODE_QUALITY);
};
ChangeArrayPushToArrayAssignRector
class SomeClass
  {
      public function run()
      {
          $items = [];
-         array_push($items, $item);
+         $items[] = $item;
      }
  }</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">CombinedAssignRector
-$value = $value + 5;
+$value += 5;
DateTimeToDateTimeInterfaceRector
class SomeClass {
-    public function methodWithDateTime(DateTime $dateTime)
+    /**
+     * @param DateTime|DateTimeImmutable $dateTime
+     */
+    public function methodWithDateTime(
         DateTimeInterface $dateTime
     ){
         return true;
     }
}
SimplifyArraySearchRector
-array_search("searching", $array) !== false;
+in_array("searching", $array);
</pre>



<h2 class="wp-block-heading" id="podsumowanie">Kod legacy – podsumowanie</h2>



<p>Pracy z legacy code nie sposób uniknąć, prędzej czy później każdy programista spotka się z nim w projekcie. Dobrze jest znać możliwości, jakie w zakresie refaktoryzacji kodu dają dostępne narzędzia, takie jak Rector. Mam nadzieję, że przekonałem was do poznania jego możliwości – a jeśli chcecie dowiedzieć się więcej, zachęcam do obejrzenia mojego wystąpienia na DrupalCamp Poland 2021:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Rector - nigdy więcej legacy code - Marek Karmelski - DrupalCamp Poland 2021" width="500" height="281" src="https://www.youtube.com/embed/Cg03e_M5Mw0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/refaktoryzacja-kodu-php-z-rector/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content url="https://www.youtube.com/embed/Cg03e_M5Mw0" medium="video" width="1280" height="720">
			<media:player url="https://www.youtube.com/embed/Cg03e_M5Mw0" />
			<media:title type="plain">Rector - nigdy więcej legacy code - Marek Karmelski - DrupalCamp Poland 2021</media:title>
			<media:description type="html"><![CDATA[Wprowadzenie i opis działania narzędzia Rector]]></media:description>
			<media:thumbnail url="https://nearshore-it.eu/wp-content/uploads/2024/09/2022-03-02-cover.jpg" />
			<media:rating scheme="urn:simple">nonadult</media:rating>
		</media:content>
	</item>
		<item>
		<title>Wzorce projektowe w systemach e-commerce</title>
		<link>https://nearshore-it.eu/pl/artykuly/wzorce-projektowe-w-systemach-e-commerce/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/wzorce-projektowe-w-systemach-e-commerce/#respond</comments>
		
		<dc:creator><![CDATA[Piotr]]></dc:creator>
		<pubDate>Wed, 15 Jul 2020 06:18:26 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/wzorce-projektowe-w-systemach-e-commerce/</guid>

					<description><![CDATA[Systemy e-commerce charakteryzują się dużą złożonością. Dzięki niej jednak programiści zyskują bardzo dużą elastyczność w projektowaniu. Aby system był czytelny dla programisty, każda aplikacja e-commerce powinna powstawać w oparciu o ogólnie przyjęte wzorce projektowe. W dzisiejszym tekście chciałbym przybliżyć dobre praktyki i opisać wybrane wzorce, ale i przestrzec przed antywzorcami, które też niestety czasami się pojawiają.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Przejdź do:</p>
    <ol>
                    <li><a href="#E-commerce-od-czego-zaczac">1.  E-commerce – od czego zacząć?</a></li>
                    <li><a href="#Nikt-nie-obiecywal-ze-bedzie-latwo">2.  Nikt nie obiecywał, że będzie łatwo</a></li>
                    <li><a href="#Najwazniejsze-wzorce-projektowe-w-e-commerce">3.  Najważniejsze wzorce projektowe w e-commerce</a></li>
                    <li><a href="#Pomysle-o-tym-pozniej-czyli-antywzorce-projektowe">4.  Pomyślę o tym później – czyli antywzorce projektowe</a></li>
                    <li><a href="#Podsumowanie">5.  Podsumowanie</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="E-commerce-od-czego-zaczac">E-commerce – od czego zacząć?</h2>



<p>Próg wejścia w przypadku programowania systemów e-commerce, ze względu na ich złożoność, jest dużo większy niż w przypadku pisania systemu od podstaw. Żeby zacząć rozwijać taką aplikację, potrzebne są więc spora wiedza i doświadczenie. Tworząc taki system, można dużą część funkcjonalności pokryć funkcjami “out of the box”, jakich nam dostarcza jego wersja domyślna. Natomiast modyfikacje takiego systemu wymagają już sporej wiedzy na temat jego budowy i funkcjonowania.</p>



<p><strong>Pracę nad aplikacją e-commerce dobrze jest zacząć od szkolenia z zakresu programowania w danej technologii. W ten sposób zdobywamy podstawową wiedzę na temat dobrych praktyk programowania w projekcie.</strong> Często zdarza się, że systemy e-commerce wykorzystują gotowe frameworki służące do pisania aplikacji. Złożoność takich systemów jest duża, jednak owocuje to korzyściami dla programistów i użytkowników. Otrzymujemy potężne aplikacje, które są bardzo elastyczne oraz mają spore możliwości konfiguracyjne dla użytkownika obsługującego je od zaplecza.</p>



<p><strong>Czytaj także: <a href="https://nearshore-it.eu/pl/artykuly/frameworkowe-wojny">Frameworkowe wojny</a></strong></p>



<h2 class="wp-block-heading" id="Nikt-nie-obiecywal-ze-bedzie-latwo">Nikt nie obiecywał, że będzie łatwo…</h2>



<p>Poruszanie się w gąszczu wzorców nie należy do najłatwiejszych. Ponadto jedna funkcjonalność może wpływać na drugą i trzeba wcześniej upewniać się co do wdrażanych modyfikacji w systemie. Warto też pamiętać, że wszystkie modyfikacje należy wykonywać zgodnie z zasadami. <strong>Dlatego właśnie moim zdaniem utrzymywanie systemów e-commerce jest trudniejsze niż ich pisanie.</strong></p>



<p><strong>Duże systemy e-commerce napisane w technologii PHP, takie jak Magento czy Shopware, korzystają z bibliotek Symfony i Zend.</strong> Na rynku mamy wiele podobnych rozwiązań gotowych do instalacji i rozbudowy. Niektóre systemy oferują wprawdzie wersję enterprise dla bardziej wymagających klientów, jednak licencja jest zazwyczaj kosztowna i przeznaczona dla dużych systemów. Warto więc rozważyć kastomizację, która będzie tańsza i będzie w pełni spełniać wymagania naszej firmy.&nbsp;<strong>Co ważne, na rynku narzędzi e-commerce zaczęły się już pojawiać systemy, które można łatwo skalować w chmurze AWS, Google Cloud lub Azure.</strong> Idealnie więc jest mieć rozwiązanie, które pozwala na migrację pomiędzy chmurami.&nbsp;Aby stworzyć tak skomplikowany system, trzeba trzymać się sztywnych reguł pisania aplikacji. Jak więc ułatwić sobie pracę? </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="nearshore 2022.12.01 cover" title="Wzorce projektowe w systemach e-commerce 3"></div><div class="tile-content"><p class="entry-title client-name">EXPERT KNOWLEDGE</p>

<h3>Read on to discover the importance of Scrum's value of respect.</h3>
<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>



<h2 class="wp-block-heading" id="Najwazniejsze-wzorce-projektowe-w-e-commerce">Najważniejsze wzorce projektowe w e-commerce</h2>



<p>Wzorców projektowych w pisaniu systemów informatycznych jest mnóstwo i nie chciałbym się skupiać na wymienianiu wszystkich. Postaram się przybliżyć najważniejsze z nich, które przynoszą największe korzyści pod względem jakości kodu. Oto kilka wzorców projektowych, bez których stworzenie jakiejkolwiek aplikacji komercyjnej byłoby wręcz niemożliwe. </p>



<p>Wyróżniamy trzy rodzaje wzorców projektowych:</p>



<h3 class="wp-block-heading">Kreacyjne</h3>



<p>Opisują one procesy tworzenia nowych obiektów, do ich zadań należą także wszelkie czynności związane z ich konfiguracją oraz tworzeniem typów danych.</p>



<ul class="wp-block-list">
<li><strong><em>Property</em> </strong>– to najbardziej podstawowy z wzorców kreacyjnych. Służy głównie do przetrzymywania konfiguracji, jest to bardzo ważne ze względu na to, że eliminuje ryzyko duplikowania wartości konfigurujących oraz ułatwia późniejsze modyfikacje i utrzymywanie kodu.</li>



<li><em><strong>Abstract factory</strong> </em>– jest wzorcem, który może posłużyć w budowaniu aplikacji, określa on interfejs do tworzenia różnych obiektów należących do tego samego typu (domeny).</li>



<li><strong><em>Factory method</em></strong> – jest podobnym wzorcem do abstract factory. Również określa interfejs, z tym, że odnosi się do różnych metod zamiast obiektów.<br><h3>Strukturalne</h3> Definiują struktury powiązanych ze sobą obiektów. </li>
</ul>



<ul class="wp-block-list">
<li><strong style="font-size: 16px;"><em>Adapter</em> </strong><span style="font-size: 16px;">– to przykład wzorca strukturalnego, który może posłużyć obsługi niezgodnych interfejsów w obiektach. Jego zadaniem w takim przypadku jest umożliwienie komunikacji takich obiektów.</span></li>



<li><em><strong>Facade</strong> </em>– to kolejny wzorzec strukturalny. Przechowuje on mapę obiektów wraz z możliwością ich obsłużenia. Implementacja tego wzorca może odbyć się przez stworzenie klasy oraz osadzenie w niej wszystkich obiektów, które realizują konkretną logikę aplikacji. <br><h3>Czynnościowe</h3><p>Opisują wzajemne zależności pomiędzy obiektami.</p></li>



<li><strong><em>Observer</em> </strong>– to jeden z popularnych wzorców czynnościowych. Służy on do obsługi zdarzeń w aplikacjach i dzięki niemu aplikację można łatwo rozszerzać. Przykładem takiego zdarzenia w systemie e-commerce może być moment wystawienia faktury za transakcję. Przykładowo, programista w zależności od wymogów biznesu może zaprogramować jakąś akcję po wystawieniu faktury, np. dodatkowe powiadomienie dla pracownika sklepu.</li>



<li><strong><em>Dependency injection</em> </strong>– kolejnym wzorcem czynnościowym jest dependency injection. Polega on na „wstrzykiwaniu” zależności jednego obiektu do drugiego oraz wykonywanie na nim operacji, na podstawie których jest realizowana logika aplikacji. Pozwala na usuwanie zależności pomiędzy danymi komponentami.</li>
</ul>



<h2 class="wp-block-heading" id="Pomysle-o-tym-pozniej-czyli-antywzorce-projektowe">Pomyślę o tym później – czyli antywzorce projektowe</h2>



<p>Pisząc o wzorcach w e-commerce, chciałbym wspomnieć także o antywzorcach projektowych, których również jest sporo.</p>



<ul class="wp-block-list">
<li><em><strong>Gold plating</strong> – </em>ciekawym antywzorcem projektowym jest gold plating, czyli tzw. złocenie. Mamy z nim do czynienie w sytuacji, gdy prace nad projektem lub zadaniem trwają dłużej, niż jest to wymagane (np. z powodu ciągłego ulepszania funkcjonalności i chęci dostarczenia klientowi jeszcze lepszego produktu). W pewnym momencie zostaje jednak przekroczony punkt krytyczny, w którym dodatkowy wysiłek nie przynosi wartości dodanej w projekcie.</li>



<li><strong><em>We’ll handle it later</em></strong><em> – </em>przykładem równie skrajnym jest wspomniane <em>we’ll handle it later, </em>czyli tzw. „Na tym etapie bym się tym nie przejmował”. Antywzorzec ten stosowany jest, gdy analiza danego zadania lub projektu nie została wykonana prawidłowo lub nie została przeprowadzona w ogóle.</li>



<li><strong><em>U mnie działa</em></strong> – kto z nas nie słyszał choć raz w życiu „U mnie działa?”. To często spotykane stwierdzenie można często spotkać przy uruchomieniu aplikacji na różnych systemach operacyjnych lub przy w różnych środowiskach klienckich. A przecież warto zbadać każde zgłoszenie – ignorowanie problemów na początkowym etapie może mieć dalsze konsekwencje na późniejszych etapach projektów.</li>



<li><strong><em>Hard code</em></strong> – tzw. umieszczenie w kodzie tej samej zmiennej w kilku miejscach, co drastycznie wpływa na późniejsze utrzymanie takiej aplikacji.</li>
</ul>



<h2 class="wp-block-heading" id="Podsumowanie">Podsumowanie</h2>



<p>Systemy e-commerce nie tracą na popularności i dają duże możliwości zarówno użytkownikom, jak i programistom. Aby nie pogubić się w ich złożoności i w pełni wykorzystać ich potencjał, warto wystrzegać się opisanych przeze mnie antywzorców i pogłębiać swoją wiedzę na temat dobrych praktyk. Nie tylko w programowaniu przekładają się one na najlepsze rezultaty. Mam nadzieję, że opisane przeze mnie przykładowe wzorce zachęcą 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>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/wzorce-projektowe-w-systemach-e-commerce/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Frameworkowe wojny</title>
		<link>https://nearshore-it.eu/pl/artykuly/frameworkowe-wojny/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/frameworkowe-wojny/#respond</comments>
		
		<dc:creator><![CDATA[Rafal Baran]]></dc:creator>
		<pubDate>Tue, 25 Feb 2020 08:07:15 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/frameworkowe-wojny/</guid>

					<description><![CDATA[W mojej codziennej pracy <a href="https://www.jcommerce.pl/uslugi-it/rozwoj-oprogramowania/php">programisty PHP</a> lubię używać frameworków, ponieważ są one rezultatem współpracy społeczności. Dzięki nim programiści nie muszą zastanawiać się nad rozwiązaniem powtarzalnych problemów, które zostały już kiedyś rozwiązane, i koncentrują się na wyższej warstwie aplikacji. Ale jednocześnie każdy z nich może wnieść swój wkład w  rozwój frameworka, w którym pracuje.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Przejdź do:</p>
    <ol>
                    <li><a href="#Frameworki-zalety-i-wady">1.  Frameworki – zalety i wady</a></li>
                    <li><a href="#Jak-prawidlowo-korzystac-z-frameworkow">2.  Jak prawidłowo korzystać z frameworków?</a></li>
                    <li><a href="#Podejscie-multi-framework">3.  Podejście multi-framework</a></li>
                    <li><a href="#Podsumowanie">4.  Podsumowanie</a></li>
            </ol>
</div>


<p>Na rynku dostępnych jest wiele rozwiązań dla wykorzystywanej przeze mnie technologii, nie jest więc trudno wybrać najbardziej odpowiedni dla konkretnego projektu lub odpowiednio do osobistych preferencji. Przyjrzyjmy się wszystkim obszarom programowania, w których można używać frameworków.</p>



<p>Można je zastosować w takich obszarach, jak:</p>



<ul class="wp-block-list">
<li><strong>Kompilatory różnych języków programowania</strong> – chodzi o programy do automatycznego tłumaczenia kodu napisanego w jednym języku na odpowiadający mu kod w drugim języku,</li>



<li><strong>Aplikacje do modelowania finansowego,</strong></li>



<li><strong>Aplikacje do modelowania </strong>typu Earth Science Applications (ESA),</li>



<li><strong>Systemy wspomagające podejmowanie decyzji</strong> – systemy dostarczające informacje i wiedzę,</li>



<li><strong>Aplikacje webowe</strong> – programy komputerowe, które działają na serwerach za pośrednictwem sieci komputerowych i łączą się z komputerami użytkowników za pomocą przeglądarki internetowej,</li>



<li><strong>Middleware</strong> – oprogramowanie pośredniczące pomiędzy różnymi aplikacjami, usługami lub systemami.</li>
</ul>



<p>Na rynku oprogramowania mamy obecnie wiele rozwiązań gotowych do użycia, a większość z nich oparta jest na frameworkach. Zapewniają one bardzo przejrzystą i sformalizowaną architekturę, aby umożliwić programistom dokonywanie dalszych modyfikacji oraz zorganizowaną pracę w grupie. Taka budowa oprogramowania charakteryzuje się wysokim poziomem złożoności. Warto jest jednak się uczyć tych technologii i rozwiązań, ponieważ mogą one przyspieszyć zarówno twoją pracę, jak i pracę całego zespołu. Przyjrzyjmy się temu jeszcze bardziej szczegółowo i spójrzmy na listę zalet i wad frameworków.</p>



<p><strong>Czytaj także:<a href="https://nearshore-it.eu/pl/artykuly/clean-architecture"> Clean Architecture</a></strong></p>



<h2 class="wp-block-heading" id="Frameworki-zalety-i-wady">Frameworki – zalety i wady</h2>



<h3 class="wp-block-heading">Zalety:</h3>



<ul class="wp-block-list">
<li><strong>Wydajność</strong> – dzięki budowaniu aplikacji przy użyciu frameworka programista pisze mniej kodu,</li>



<li><strong>Lepsza jakość kodu</strong> – ponieważ frameworki są zaprojektowane w taki sposób, by zapewnić elastyczność, mają dobrą logikę wewnętrzną i narzucają tę samą logikę stworzonej aplikacji,</li>



<li><strong>Niezawodność</strong> – frameworki takie jak szkielety aplikacji są dobrze zaprojektowane i przetestowane.</li>
</ul>



<h3 class="wp-block-heading">Wady</h3>



<ul class="wp-block-list">
<li><strong>Złożoność</strong> – frameworki są trudniejsze do nauki ze względu na szerokie i zaawansowane użycie,</li>



<li><strong>Wydajność</strong> – elastyczna konstrukcja utworzonego oprogramowania często uzyskiwana jest kosztem niższej wydajności (w tym miejscu muszę wspomnieć o systemach pamięci podręcznej, które w dużym stopniu mogą przyśpieszyć odpowiedzi serwera i zrównać je lub zbliżyć do odpowiedzi „czystego” kodu).</li>
</ul>



<p>Jak widać, plusów jest więcej niż minusów, co moim zdaniem jest największą zaletą frameworków. Musimy jednak pamiętać, że frameworki nie są zawsze najlepszym rozwiązaniem. Na przykład, jeśli potrzebujemy stworzyć aplikację do wyświetlania na ekranie pojedynczej wiadomości jako odpowiedzi serwera, użycie dodatkowych narzędzi bez zaawansowanego systemu pamięci podręcznej spowolni odpowiedź serwera i działanie aplikacji. Taka aplikacja wymaga tylko jednego polecenia do wykonania i nie są potrzebne żadne dodatkowe narzędzia, aby otrzymać wymagany rezultat.</p>



<h2 class="wp-block-heading" id="Jak-prawidlowo-korzystac-z-frameworkow"><strong>Jak prawidłowo korzystać z frameworków?</strong></h2>



<p>Nie można powiedzieć, że frameworki mogą rozwiązać wszystkie problemy związane z programowaniem, ale z pewnością mogą pomóc w codziennych zadaniach. Z drugiej strony – trzeba być ostrożnym. Wiele razy obserwowałem konwersacje na forach poświęconych danemu frameworkowi, w których dyskutujący próbują udowodnić, że wybrany przez nich framework jest najlepszy – czego nie da się jednoznacznie stwierdzić bez dokładnej analizy problemu.</p>



<p>Moim zdaniem frameworki są jak narzędzia – im więcej posiadasz narzędzi, tym więcej problemów jesteś w stanie rozwiązać. Jeśli masz tylko młotek, będziesz mógł jedynie wbić gwóźdź. Jeśli masz natomiast cały garaż pełen narzędzi, możesz stworzyć dużo więcej rzeczy.</p>



<p><strong>Czytaj także: <a href="https://nearshore-it.eu/pl/artykuly/artykuly-eksperckie/szalenstwo-mikroserwisow">Szaleństwo mikroserwisów</a></strong></p>



<h2 class="wp-block-heading" id="Podejscie-multi-framework"><strong>Podejście multi-framework</strong></h2>



<p>Takie podejście jest rezultatem architektury obecnych aplikacji, budowanych z bibliotek – oddzielnych modułów z własnymi wymaganiami, które można wykorzystać, aby stworzyć dowolny rodzaj aplikacji. W ten sposób aplikację można podzielić na mniejsze części i dzięki temu będzie bardziej zrozumiała dla większej liczby osób. Biblioteki organizują również strukturę aplikacji i pomagają rozwijać większe projekty.</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/Framework_graphic_1.png" alt="Frameworki" class="wp-image-25759" title="Frameworkowe wojny 4"></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>W myśl tego podejścia możemy używać bibliotek jako niezależnego oprogramowania i instalować je w celu zbudowania większych aplikacji. Nie ma przeszkód w korzystaniu w taki sam sposób z frameworków – każda część aplikacji może być zbudowana przy użyciu innego. Dlaczego tak jest? Kiedy korzystamy z bibliotek utworzonych tylko dla jednego frameworka, nie jesteśmy w stanie korzystać z oprogramowania stworzonego dla innych, które może znacząco ulepszyć i przyśpieszyć pracę&nbsp;nad projektem.</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/Framework_graphic_2.png" alt=" class=" class="wp-image-25760" title="Frameworkowe wojny 5"></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Podsumowanie">Podsumowanie</h2>



<p>Podsumowując – powinniśmy stosować podejście, które pozwoli nam pozostać otwartym na stosowanie różnych bibliotek, a w tym przypadku nazwa frameworka jest tylko źródłem pochodzenia danej biblioteki.&nbsp;Przykładem takiego podejścia są <strong>popularne rozwiązania</strong>, jak platformy e-commerce <strong>Magento</strong> i <strong>Sylius</strong> czy też sklep e-commerce nowej generacji o nazwie <strong>Shopware</strong>. Zastosowanie podejścia multi-framework to nie tylko e-commerce – zaobserwujemy je również w popularnych i bardzo elastycznych rozwiązaniach CMF takich jak <strong>Sulu</strong>. Gdy sprawdzamy kod źródłowy tych aplikacji na GitHubie, można zobaczyć, że autorzy korzystali z bibliotek pochodzących z frameworków Zend i Symfony – bibliotekami tymi można zarządzać w technologii PHP za pośrednictwem composera. Na pierwszy rzut oka proporcje nie są duże, jednak możemy zacząć uważać to za wykorzystanie podejścia multi-framework i traktować jako świadomą decyzję w kontekście realizacji architektury projektu.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/frameworkowe-wojny/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
