From 053575cde8d9ad9422abad144e0ffba1dfd5268b Mon Sep 17 00:00:00 2001 From: Erison Silva Date: Fri, 27 Sep 2024 13:24:39 +0200 Subject: [PATCH] New post: Decorator pattern from open source code --- ...st-symfony-profile-page-on-log-section.png | Bin 0 -> 96898 bytes ...open-source-code-with-decorator-pattern.md | 254 ++++++++++++++++++ 2 files changed, 254 insertions(+) create mode 100644 src/assets/images/decorator-post-symfony-profile-page-on-log-section.png create mode 100644 src/content/blog/how-to-enhance-final-classes-from-open-source-code-with-decorator-pattern.md diff --git a/src/assets/images/decorator-post-symfony-profile-page-on-log-section.png b/src/assets/images/decorator-post-symfony-profile-page-on-log-section.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c252e11551eb1506125ff65d319be35a3105a9 GIT binary patch literal 96898 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%0A&Lb*B_-{7oUi%_E_0fS{Z{9!C|la^;{1a!k~#KR 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 M1x@+)vX;UB1Ko}?iU0rr literal 0 HcmV?d00001 diff --git a/src/content/blog/how-to-enhance-final-classes-from-open-source-code-with-decorator-pattern.md b/src/content/blog/how-to-enhance-final-classes-from-open-source-code-with-decorator-pattern.md new file mode 100644 index 0000000..05d8b30 --- /dev/null +++ b/src/content/blog/how-to-enhance-final-classes-from-open-source-code-with-decorator-pattern.md @@ -0,0 +1,254 @@ +--- +author: Erison Silva +pubDatetime: 2024-10-10T09:00:00+02:00 +title: How to enhance final classes from open source code with decorator pattern +slug: how-to-enhance-final-classes-from-open-source-code-with-decorator-pattern +featured: true +draft: false +tags: + - pattern + - developer +description: Discover how the Decorator pattern can effectively enhance and modify functionalities from open source code, particularly when working with final classes. This comprehensive guide delves into practical strategies for achieving code flexibility without inheritance, offering real-world examples and best practices from popular open source projects. Learn how to leverage design patterns to improve code maintainability and reusability in your software development projects. +--- + +In many open source repositories, especially those with just a _few maintainers_, you’ll often find classes declared as **final**. +This approach allows maintainers to make changes without worrying too much about backward compatibility. +However, it can also make the code a bit challenging to modify. The good news is that it’s not as difficult as it seems! +Since these classes usually implement interfaces and utilize _composition_, we can tap into the advantages of the [Decorator pattern][decorator-pattern]. + +## Table of contents + +## Utilizing an open source project + +In my search for an open source project with a significant user base, I came across [EasyAdminBundle][easy-admin-bundle], which boasts over **18,000 users** and **4,000 stars** on GitHub. +For this example, I’ll be focusing on the [AdminUrlGenerator.php][admin-url-generator] file. We will implement a dispatch event that gets triggered when the [generate method][admin-url-generator-method] is called. + +## Building a decorator class + +Since AdminUrlGenerator.php is a final class, we cannot extend it or override the `generate` method. In this case, a suitable alternative is to use a decorator. + +```php +adminUrlGenerator->generate(); + $this->event->dispatch(new UrlGeneratedEvent($url)); + + return $url; + } + + public function setRoute(string $routeName, array $routeParameters = []): self + { + $this->adminUrlGenerator->setRoute($routeName, $routeParameters); + + return $this; + } + + public function get(string $paramName): mixed + { + return $this->adminUrlGenerator->get($paramName); + } + + //.... +} +``` + +## Analyzing the AdminUrlGeneratorDecorator + +```php +#[AsDecorator(decorates: AdminUrlGenerator::class)] + +//... + +#[AutowireDecorated] +``` + +Since EasyAdminBundle is built on the _Symfony Framework_, it provides a way to [decorate classes][symfony-docorator] using Symfony's built-in features. In the `decorates` parameter, you specify the class you want to decorate, which allows Symfony to inject `AdminUrlGeneratorDecorator` in place of the original `AdminUrlGenerator`. + +By adding the `#[AutowireDecorated]` attribute above the `$adminUrlGenerator` property, Symfony automatically injects the original AdminUrlGenerator class into that parameter. This allows the decorator to use the functionality of the original class and extend it as needed. + +```php +adminUrlGenerator->generate(); + $this->event->dispatch(new UrlGeneratedEvent($url)); + + return $url; + } +``` + +This is the method we want to modify. + +In the first line, we call the original method to generate the URL. + +The second line dispatches our custom event, passing the generated URL as an argument + +Finally, we return the URL generated by the original method, ensuring that the decorator retains the original behavior while adding our enhancements. + +```php +adminUrlGenerator->setRoute($routeName, $routeParameters); + + return $this; + } + + public function get(string $paramName): mixed + { + return $this->adminUrlGenerator->get($paramName); + } + + //.... +``` + +You might be wondering, "Why do I need to implement these methods if I only want to change the `generate` method?" + +The reason is that the `AdminContextProvider` interface requires us to implement all its defined methods. In this case, we must implement these methods and call the original implementations, as demonstrated with the `setRoute` and `get` methods. + +> For simplicity, I haven't included all methods in this example, but it's important to note that you must implement all of them. + +## Complete Implementation + +```php +//src/Decorator/AdminUrlGeneratorDecorator.php +url; + } +} +``` + +```php +//src/Listener/UrlGeneratedListener.php +logger->info( + 'New url generated.', + [ + 'url' => $event->getUrl(), + 'eventClass' => get_class($event), + 'listenerClass' => get_class($this), + ] + ); + } +} +``` + +The `AdminContextProvider` interface is utilized in several classes, including [MenuFactory.php][easy-admin-menu-factory], which is called when loading an admin page that contains a menu. + +When you navigate to the `/admin` page, you will notice an info log created by our listener, indicating that our decorator and event system are functioning as intended. + +You can check the screenshot below. +![Image with symfony profile page on log section](@assets/images/decorator-post-symfony-profile-page-on-log-section.png) + +## Conclusion + +In conclusion, the **Decorator Pattern** provides a powerful way to extend and modify the functionality of existing classes without altering their core implementation. By leveraging the `AdminContextProvider` interface, we were able to create a flexible and reusable solution that enhances our application’s capabilities. + +I hope this post has provided valuable insights into using decorators in open-source projects. If you have any questions or thoughts, feel free to leave a comment below. + +Happy coding! + +[decorator-pattern]: https://refactoring.guru/design-patterns/decorator +[easy-admin-bundle]: https://github.com/EasyCorp/EasyAdminBundle +[easy-admin-menu-factory]: https://github.com/EasyCorp/EasyAdminBundle/blob/v4.12.0/src/Factory/MenuFactory.php#L28 +[admin-url-generator]: https://github.com/EasyCorp/EasyAdminBundle/blob/v4.12.0/src/Router/AdminUrlGenerator.php +[admin-url-generator-method]: https://github.com/EasyCorp/EasyAdminBundle/blob/v4.12.0/src/Router/AdminUrlGenerator.php#L261 +[admin-context-provider-interface]: https://github.com/EasyCorp/EasyAdminBundle/blob/v4.12.0/src/Router/AdminUrlGeneratorInterface.php#L10 +[symfony-docorator]: https://symfony.com/doc/current/service_container/service_decoration.html