{"id":57274,"date":"2026-03-26T08:00:00","date_gmt":"2026-03-26T11:00:00","guid":{"rendered":"https:\/\/felipemateus.com\/?p=57274"},"modified":"2026-05-15T01:17:23","modified_gmt":"2026-05-15T04:17:23","slug":"refactoring-feeds-with-abstract-classes","status":"publish","type":"post","link":"https:\/\/felipemateus.com\/en\/blog\/2026\/03\/refactoring-feeds-with-abstract-classes","title":{"rendered":"Less Repetition: Refactoring Feeds with Abstract Classes"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Sometimes, in the flow of development, we end up taking the fastest route: the famous <strong>Control + C \/ Control + V<\/strong>. Recently, I found myself in this situation while developing an app in Flutter. I needed three different feeds: one for followed users, one local, and one global.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Problem: The Trap of Repetition<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the first version, I had three separate files: <strong>HomeFeedScreen<\/strong>, <strong>LocalFeedScreen<\/strong> and <strong>GlobalFeedScreen<\/strong>. Every time I decided to add a new feature\u2014like a &quot;like&quot; or &quot;reblog&quot; button\u2014I was forced to replicate the code in all three files.<\/p>\n\n\n\n<script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-2130373218745562\"\n     crossorigin=\"anonymous\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2130373218745562\"\n     data-ad-slot=\"8985701516\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Solution: Inheritance and Abstract Classes<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To solve this, I decided to apply a fundamental concept of Object-Oriented Programming: a <strong>abstraction<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of three independent screens, I created one. <strong>abstract class<\/strong> which extends <em>State<\/em> of <em>Flutter<\/em>. This parent class contains all the common intelligence found in feeds: scroll control, list management, and error handling.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The &quot;trick&quot; was to declare an abstract method called <strong><em>fetchPosts<\/em><\/strong>().<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How did the code turn out (in practice)?<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The structure ended up looking something like this:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>The Daughter Classes (Specialization):<\/strong> Now, LocalFeedScreen, HomeFeedScreen, and GlobalFeedScreen are extremely lean. They simply extend the parent class and implement the fetchPosts function, calling the specific endpoint for each one.<\/li>\n\n\n\n<li><strong>The Parent Class (The Template):<\/strong> She takes care of everything that is repetitive. She knows. <em>as<\/em> display the posts, but don&#039;t know <em>which<\/em> Search for posts.<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"706\" height=\"558\" src=\"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-43.png\" alt=\"Image of the Local FeedScreen class\" class=\"wp-image-57279\" srcset=\"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-43.png 706w, https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-43-300x237.png 300w, https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-43-15x12.png 15w, https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-43-150x119.png 150w\" sizes=\"auto, (max-width: 706px) 100vw, 706px\" \/><figcaption class=\"wp-element-caption\"> LocalFeedScreen class<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"706\" height=\"558\" src=\"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-50.png\" alt=\"Image shows HomeFeedScreen class\" class=\"wp-image-57280\" srcset=\"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-50.png 706w, https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-50-300x237.png 300w, https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-50-15x12.png 15w, https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-50-150x119.png 150w\" sizes=\"auto, (max-width: 706px) 100vw, 706px\" \/><figcaption class=\"wp-element-caption\">Image of the HomeFeedScreen class<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"706\" height=\"558\" src=\"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-56.png\" alt=\"Image shows GlobalHomeScreen class.\" class=\"wp-image-57282\" srcset=\"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-56.png 706w, https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-56-300x237.png 300w, https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-56-15x12.png 15w, https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/Screenshot_2026-03-15_08-37-56-150x119.png 150w\" sizes=\"auto, (max-width: 706px) 100vw, 706px\" \/><figcaption class=\"wp-element-caption\">Image of the GlobalFeedScreen class<\/figcaption><\/figure>\n<\/div>\n\n\n<script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-2130373218745562\"\n     crossorigin=\"anonymous\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2130373218745562\"\n     data-ad-slot=\"8518797650\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<script src=\"https:\/\/gist.github.com\/eufelipemateus\/305383f1e76696e6900be495e7a5e7c3.js\"><\/script>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Result<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Now, if I want to change the function of feedPost, I change it in <strong>a single place<\/strong>. The code became cleaner, easier to read, and above all, scalable. I still intend to improve the organization and perhaps explore other forms of state management, but the simple fact of having eliminated technical redundancy (the famous principle) is already a positive development. <strong>DRY \u2013 Don&#039;t Repeat Yourself<\/strong>This has already made maintaining this project much more enjoyable.<\/p>","protected":false},"excerpt":{"rendered":"<p>Refactoring applied to eliminate unnecessary repetition in the code, optimizing the structure and facilitating future maintenance.<\/p>","protected":false},"author":2,"featured_media":59699,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"googlesitekit_rrm_CAowhPjFCw:productID":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":"","jetpack_publicize_message":"Refatorando e aplicando o princ\u00edpio DRY (Don't Repeat Yourself). Removi repeti\u00e7\u00f5es desnecess\u00e1rias no c\u00f3digo para garantir uma arquitetura mais s\u00f3lida e escal\u00e1vel.","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1935],"tags":[1053],"class_list":["post-57274","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento-web-e-programacao","tag-programacao"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas - Felipe Mateus @felipemateus<\/title>\n<meta name=\"description\" content=\"Felipe Mateus - Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas - Felipe Mateus @felipemateus\" \/>\n<meta property=\"og:description\" content=\"Felipe Mateus - Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas\" \/>\n<meta property=\"og:site_name\" content=\"Felipe Mateus\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/eufelipemateus\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/eufelipemateus\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-26T11:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-15T04:17:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/codigos-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Felipe Mateus\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@eufelipemateus\" \/>\n<meta name=\"twitter:site\" content=\"@eufelipemateus\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Felipe Mateus\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas\"},\"author\":{\"name\":\"Felipe Mateus\",\"@id\":\"https:\\\/\\\/felipemateus.com\\\/#\\\/schema\\\/person\\\/5ca2279426b9f93497fbf68a6e2577b6\"},\"headline\":\"Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas\",\"datePublished\":\"2026-03-26T11:00:00+00:00\",\"dateModified\":\"2026-05-15T04:17:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas\"},\"wordCount\":353,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/felipemateus.com\\\/#\\\/schema\\\/person\\\/5ca2279426b9f93497fbf68a6e2577b6\"},\"image\":{\"@id\":\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/felipemateus.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/codigos-scaled.jpg\",\"keywords\":[\"Programa\u00e7\u00e3o\"],\"articleSection\":[\"Desenvolvimento Web e Programa\u00e7\u00e3o\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas\",\"url\":\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas\",\"name\":\"Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas - Felipe Mateus @felipemateus\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/felipemateus.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/felipemateus.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/codigos-scaled.jpg\",\"datePublished\":\"2026-03-26T11:00:00+00:00\",\"dateModified\":\"2026-05-15T04:17:23+00:00\",\"description\":\"Felipe Mateus - Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas#primaryimage\",\"url\":\"https:\\\/\\\/felipemateus.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/codigos-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/felipemateus.com\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/codigos-scaled.jpg\",\"width\":2560,\"height\":1707},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mundoazul.blog\\\/2026\\\/03\\\/refatorando-feeds-com-classes-abstratas#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/felipemateus.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Desenvolvimento Web e Programa\u00e7\u00e3o\",\"item\":\"https:\\\/\\\/felipemateus.com\\\/blog\\\/topicos\\\/desenvolvimento-web-e-programacao\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/felipemateus.com\\\/#website\",\"url\":\"https:\\\/\\\/felipemateus.com\\\/\",\"name\":\"Felipe Mateus @felipemateus\",\"description\":\"Seja Bem-Vindo ao meu mundo azul.\",\"publisher\":{\"@id\":\"https:\\\/\\\/felipemateus.com\\\/#\\\/schema\\\/person\\\/5ca2279426b9f93497fbf68a6e2577b6\"},\"alternateName\":\"eufelipemateus\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/felipemateus.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/felipemateus.com\\\/#\\\/schema\\\/person\\\/5ca2279426b9f93497fbf68a6e2577b6\",\"name\":\"Felipe Mateus Rocha Martins\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/felipemateus.com\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/FELIPE-2-1024x1024.png\",\"url\":\"https:\\\/\\\/felipemateus.com\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/FELIPE-2-1024x1024.png\",\"contentUrl\":\"https:\\\/\\\/felipemateus.com\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/FELIPE-2-1024x1024.png\",\"width\":1024,\"height\":1024,\"caption\":\"Felipe Mateus\"},\"sameAs\":[\"https:\\\/\\\/felipemateus.com\",\"https:\\\/\\\/www.facebook.com\\\/eufelipemateus\",\"https:\\\/\\\/www.instagram.com\\\/eufelipemateus\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/eufelipemateus\\\/\",\"https:\\\/\\\/x.com\\\/eufelipemateus\",\"https:\\\/\\\/github.com\\\/eufelipemateus\",\"https:\\\/\\\/soundcloud.com\\\/eufelipemateus\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Less Repetition: Refactoring Feeds with Abstract Classes - Felipe Mateus @felipemateus","description":"Felipe Mateus - Less Repetition: Refactoring Feeds with Abstract Classes","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas","og_locale":"en_US","og_type":"article","og_title":"Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas - Felipe Mateus @felipemateus","og_description":"Felipe Mateus - Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas","og_url":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas","og_site_name":"Felipe Mateus","article_publisher":"https:\/\/www.facebook.com\/eufelipemateus","article_author":"https:\/\/www.facebook.com\/eufelipemateus","article_published_time":"2026-03-26T11:00:00+00:00","article_modified_time":"2026-05-15T04:17:23+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/codigos-scaled.jpg","type":"image\/jpeg"}],"author":"Felipe Mateus","twitter_card":"summary_large_image","twitter_creator":"@eufelipemateus","twitter_site":"@eufelipemateus","twitter_misc":{"Written by":"Felipe Mateus","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas#article","isPartOf":{"@id":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas"},"author":{"name":"Felipe Mateus","@id":"https:\/\/felipemateus.com\/#\/schema\/person\/5ca2279426b9f93497fbf68a6e2577b6"},"headline":"Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas","datePublished":"2026-03-26T11:00:00+00:00","dateModified":"2026-05-15T04:17:23+00:00","mainEntityOfPage":{"@id":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas"},"wordCount":353,"commentCount":1,"publisher":{"@id":"https:\/\/felipemateus.com\/#\/schema\/person\/5ca2279426b9f93497fbf68a6e2577b6"},"image":{"@id":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas#primaryimage"},"thumbnailUrl":"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/codigos-scaled.jpg","keywords":["Programa\u00e7\u00e3o"],"articleSection":["Desenvolvimento Web e Programa\u00e7\u00e3o"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas#respond"]}]},{"@type":"WebPage","@id":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas","url":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas","name":"Less Repetition: Refactoring Feeds with Abstract Classes - Felipe Mateus @felipemateus","isPartOf":{"@id":"https:\/\/felipemateus.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas#primaryimage"},"image":{"@id":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas#primaryimage"},"thumbnailUrl":"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/codigos-scaled.jpg","datePublished":"2026-03-26T11:00:00+00:00","dateModified":"2026-05-15T04:17:23+00:00","description":"Felipe Mateus - Less Repetition: Refactoring Feeds with Abstract Classes","breadcrumb":{"@id":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas#primaryimage","url":"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/codigos-scaled.jpg","contentUrl":"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/codigos-scaled.jpg","width":2560,"height":1707},{"@type":"BreadcrumbList","@id":"https:\/\/mundoazul.blog\/2026\/03\/refatorando-feeds-com-classes-abstratas#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/felipemateus.com\/"},{"@type":"ListItem","position":2,"name":"Desenvolvimento Web e Programa\u00e7\u00e3o","item":"https:\/\/felipemateus.com\/blog\/topicos\/desenvolvimento-web-e-programacao"},{"@type":"ListItem","position":3,"name":"Menos Repeti\u00e7\u00e3o: Refatorando Feeds com Classes Abstratas"}]},{"@type":"WebSite","@id":"https:\/\/felipemateus.com\/#website","url":"https:\/\/felipemateus.com\/","name":"Felipe Mateus @felipemateus","description":"Welcome to my blue world.","publisher":{"@id":"https:\/\/felipemateus.com\/#\/schema\/person\/5ca2279426b9f93497fbf68a6e2577b6"},"alternateName":"eufelipemateus","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/felipemateus.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/felipemateus.com\/#\/schema\/person\/5ca2279426b9f93497fbf68a6e2577b6","name":"Felipe Mateus Rocha Martins","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2023\/04\/FELIPE-2-1024x1024.png","url":"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2023\/04\/FELIPE-2-1024x1024.png","contentUrl":"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2023\/04\/FELIPE-2-1024x1024.png","width":1024,"height":1024,"caption":"Felipe Mateus"},"sameAs":["https:\/\/felipemateus.com","https:\/\/www.facebook.com\/eufelipemateus","https:\/\/www.instagram.com\/eufelipemateus","https:\/\/www.linkedin.com\/in\/eufelipemateus\/","https:\/\/x.com\/eufelipemateus","https:\/\/github.com\/eufelipemateus","https:\/\/soundcloud.com\/eufelipemateus"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/felipemateus.b-cdn.net\/wp-content\/uploads\/2026\/03\/codigos-scaled.jpg","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pb1Prx-eTM","jetpack-related-posts":[{"id":3710,"url":"https:\/\/felipemateus.com\/en\/blog\/2021\/11\/sonoff-keyboard-key-reuse","url_meta":{"origin":57274,"position":0},"title":"sonoff: Keyboard key reuse","author":"Felipe Mateus","date":"21\/11\/2021","format":false,"excerpt":"In this text I show a homemade project that I created that allows activating the sonoff through the computer keyboard.","rel":"","context":"In &quot;Projetos&quot;","block_context":{"text":"Projetos","link":"https:\/\/felipemateus.com\/en\/blog\/topics\/projects"},"img":{"alt_text":"imagem capa para temas iot.","src":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/11\/iot-gb3efe58db_1920.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/11\/iot-gb3efe58db_1920.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/11\/iot-gb3efe58db_1920.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/11\/iot-gb3efe58db_1920.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/11\/iot-gb3efe58db_1920.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/11\/iot-gb3efe58db_1920.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":3818,"url":"https:\/\/felipemateus.com\/en\/blog\/2021\/12\/mysql-saving-files-with-nestjs-mysql","url_meta":{"origin":57274,"position":1},"title":"mysql: Saving files in mysql with nestjs","author":"Felipe Mateus","date":"12\/12\/2021","format":false,"excerpt":"This article explains how to upload files to a MySQL database.","rel":"","context":"In &quot;Desenvolvimento Web e Programa\u00e7\u00e3o&quot;","block_context":{"text":"Desenvolvimento Web e Programa\u00e7\u00e3o","link":"https:\/\/felipemateus.com\/en\/blog\/topics\/web-development-and-programming"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/12\/upload-g4ec6e5c76_1920.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/12\/upload-g4ec6e5c76_1920.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/12\/upload-g4ec6e5c76_1920.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/12\/upload-g4ec6e5c76_1920.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/12\/upload-g4ec6e5c76_1920.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2021\/12\/upload-g4ec6e5c76_1920.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":34192,"url":"https:\/\/felipemateus.com\/en\/blog\/2025\/12\/retrospective","url_meta":{"origin":57274,"position":2},"title":"Dev Retrospective: A journey of creation, PoCs, and real limitations.","author":"Felipe Mateus","date":"31\/12\/2025","format":false,"excerpt":"An immersion into the Fediverse, Web3, and distributed systems from behind the scenes of more than 20 projects from 2025. Between published tools and discarded PoCs, the text reflects on technical experimentation, regulatory barriers, and the understanding that real progress arises from the accumulated learning in each attempt.","rel":"","context":"In &quot;Projetos&quot;","block_context":{"text":"Projetos","link":"https:\/\/felipemateus.com\/en\/blog\/topics\/projects"},"img":{"alt_text":"Capa retrospectiva","src":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2025\/12\/capa-retrospectiva.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2025\/12\/capa-retrospectiva.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2025\/12\/capa-retrospectiva.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2025\/12\/capa-retrospectiva.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2025\/12\/capa-retrospectiva.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2025\/12\/capa-retrospectiva.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":54,"url":"https:\/\/felipemateus.com\/en\/blog\/2017\/06\/domino","url_meta":{"origin":57274,"position":3},"title":"\ud83c\udfb2 Domino Game Meet the Online Multiplayer game","author":"Felipe Mateus","date":"16\/06\/2017","format":false,"excerpt":"Today I started making an online multiplayer domino game in HTML5. I&#039;m using the Dice font to create the dots that represent the domino numbers.","rel":"","context":"In &quot;Projetos&quot;","block_context":{"text":"Projetos","link":"https:\/\/felipemateus.com\/en\/blog\/topics\/projects"},"img":{"alt_text":"imagem do jogo","src":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2017\/06\/2019-06-24-e1561431327464.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2017\/06\/2019-06-24-e1561431327464.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2017\/06\/2019-06-24-e1561431327464.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2017\/06\/2019-06-24-e1561431327464.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2017\/06\/2019-06-24-e1561431327464.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":53121,"url":"https:\/\/felipemateus.com\/en\/blog\/2026\/03\/wordpress-theme-improving-performance","url_meta":{"origin":57274,"position":4},"title":"Why I created my own WordPress theme.","author":"Felipe Mateus","date":"05\/03\/2026","format":false,"excerpt":"I created my own theme for my website to improve performance and reduce reliance on general-purpose plugins that weigh down the site. In the text, I detail the changes I made.","rel":"","context":"In &quot;Desenvolvimento Web e Programa\u00e7\u00e3o&quot;","block_context":{"text":"Desenvolvimento Web e Programa\u00e7\u00e3o","link":"https:\/\/felipemateus.com\/en\/blog\/topics\/web-development-and-programming"},"img":{"alt_text":"Imagem print pagespeed","src":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2026\/03\/pagespeed.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2026\/03\/pagespeed.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2026\/03\/pagespeed.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2026\/03\/pagespeed.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2026\/03\/pagespeed.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2026\/03\/pagespeed.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2740,"url":"https:\/\/felipemateus.com\/en\/blog\/2021\/05\/bingo","url_meta":{"origin":57274,"position":5},"title":"Bingo Game Multiplayer Socket.io and Javascript","author":"Felipe Mateus","date":"08\/05\/2021","format":false,"excerpt":"This is a multiplayer game made as a way to test knowledge and serve as an example for other programmers.","rel":"","context":"In &quot;Projetos&quot;","block_context":{"text":"Projetos","link":"https:\/\/felipemateus.com\/en\/blog\/topics\/projects"},"img":{"alt_text":"imagem de bingo","src":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2019\/09\/2019-09-18.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2019\/09\/2019-09-18.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2019\/09\/2019-09-18.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2019\/09\/2019-09-18.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/felipemateus.com\/wp-content\/uploads\/2019\/09\/2019-09-18.png?resize=1050%2C600&ssl=1 3x"},"classes":[]}],"jetpack_likes_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/felipemateus.com\/en\/wp-json\/wp\/v2\/posts\/57274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/felipemateus.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/felipemateus.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/felipemateus.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/felipemateus.com\/en\/wp-json\/wp\/v2\/comments?post=57274"}],"version-history":[{"count":10,"href":"https:\/\/felipemateus.com\/en\/wp-json\/wp\/v2\/posts\/57274\/revisions"}],"predecessor-version":[{"id":66522,"href":"https:\/\/felipemateus.com\/en\/wp-json\/wp\/v2\/posts\/57274\/revisions\/66522"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/felipemateus.com\/en\/wp-json\/wp\/v2\/media\/59699"}],"wp:attachment":[{"href":"https:\/\/felipemateus.com\/en\/wp-json\/wp\/v2\/media?parent=57274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/felipemateus.com\/en\/wp-json\/wp\/v2\/categories?post=57274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/felipemateus.com\/en\/wp-json\/wp\/v2\/tags?post=57274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}