<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Arif Bugaresa</title>
    <description>The latest articles on DEV Community by Arif Bugaresa (@arifbugaresa).</description>
    <link>https://dev.to/arifbugaresa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4136753%2F9fb4bf86-057c-49fd-b96f-6f1a01df970a.png</url>
      <title>DEV Community: Arif Bugaresa</title>
      <link>https://dev.to/arifbugaresa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arifbugaresa"/>
    <language>en</language>
    <item>
      <title>Single Responsibility Principle (SRP)</title>
      <dc:creator>Arif Bugaresa</dc:creator>
      <pubDate>Tue, 22 Sep 2026 07:29:14 +0000</pubDate>
      <link>https://dev.to/arifbugaresa/single-responsibility-principle-srp-52o4</link>
      <guid>https://dev.to/arifbugaresa/single-responsibility-principle-srp-52o4</guid>
      <description>&lt;p&gt;&lt;strong&gt;Single Responsibility Principle (SRP)&lt;/strong&gt; merupakan prinsip SOLID yang menyatakan bahwa sebuah kelas harus hanya memiliki satu tanggung jawab yang spesifik. Jika sebuah kelas memiliki lebih dari satu tanggung jawab dapat memengaruhi tanggung jawab yang lainnya maka dapat meningkatkan risiko bug. &lt;/p&gt;

&lt;p&gt;Analoginya untuk studi kasus mengelola sebuah resto akan ada banyak pekerjaan yang harus dilakukan seperti memasak makanan, melayani pengunjung yang datang dan membersihkan meja tamu. jika hanya ada satu petugas yang bertanggung jawab atas seluruh tugas, kemungkinan besar akan kewalahan dalam mengelola resto tersebut. jika tiba tiba ada masalah di dapur maka pengunjung akan menunggu lebih lama untuk mendapatkan pelayanan. disisi lain jika banyak pengunjung yang datang di waktu yang bersamaan maka petugas tersebut mungkin tidak sempat untuk membersihkan ruangan. itu lah mengapa di restoran yang baik, seharusnya memiliki beberapa petugas seperti koki yang fokus untuk memasak hidangan, pelayan yang hanya fokus melayani pengunjung yang datang dan cleaning service yang bertugas untuk membersihkan seluruh ruangan.&lt;/p&gt;

&lt;p&gt;Dalam konteks SRP, setiap kelas harus fokus pada tanggung jawab yang spesifik. Jika ada masalah di sebagian kode, seharusnya tidak akan memengaruhi kode yang lain. dengan menerapkan SRP ini maka code akan lebih mudah dikelola dan dipelihara.&lt;/p&gt;

&lt;p&gt;mari kita lihat contoh kode tanpa menerapkan single responsibility principle berikut.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;UserService&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;UserService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;CreateUser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"create user"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;UserService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;SendEmail&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"send email"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pada contoh diatas &lt;code&gt;UserService&lt;/code&gt; melanggar konsep SRP karena memiliki 2 tanggung jawab yaitu membuat user dan mengirim email. jika ada perubahan pada cara mengirim email maka kita perlu mengubah &lt;code&gt;UserService&lt;/code&gt; padahal seharusnya &lt;code&gt;UserService&lt;/code&gt; hanya bertanggung jawab untuk mengelola user saja.&lt;/p&gt;

&lt;p&gt;untuk menerapkan konsep SRP maka kita perlu memisahkan tanggung jawab mengelola user dan tanggung jawab mengirim email.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;UserService&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;UserService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;CreateUser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"create user"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;EmailService&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;us&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;EmailService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;SendEmail&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"send email"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sekarang, &lt;code&gt;UserService&lt;/code&gt; hanya memiliki tanggung jawab untuk mengelola user dan &lt;code&gt;EmailService&lt;/code&gt; memiliki tanggung jawab untuk pengiriman email.&lt;/p&gt;

&lt;p&gt;Beberapa dampak positif dari penerapan SRP:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ketika sebuah class/struct dirancang dengan tanggung jawab yang jelas, kita akan lebih mudah memahami fungsi dan tujuan dari class/struct tersebut.&lt;/li&gt;
&lt;li&gt;Dengan memisahkan tanggung jawab pengiriman email ke dalam &lt;code&gt;EmailService&lt;/code&gt;, perubahan pada cara atau logika pengiriman email tidak akan memengaruhi &lt;code&gt;UserService&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Karena &lt;code&gt;EmailService&lt;/code&gt; memiliki tugas yang lebih spesifik, class/struct tersebut dapat digunakan kembali di bagian lain yang membutuhkan fungsi pengiriman email.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>webdev</category>
      <category>solidprinciples</category>
      <category>go</category>
      <category>dolearncode</category>
    </item>
    <item>
      <title>Understanding SOLID Principles</title>
      <dc:creator>Arif Bugaresa</dc:creator>
      <pubDate>Tue, 22 Sep 2026 07:06:31 +0000</pubDate>
      <link>https://dev.to/arifbugaresa/mengenal-solid-principles-9ce</link>
      <guid>https://dev.to/arifbugaresa/mengenal-solid-principles-9ce</guid>
      <description>&lt;p&gt;&lt;strong&gt;SOLID Principles&lt;/strong&gt; berawal dari upaya para pakar perangkat lunak untuk membuat kode yang lebih terstruktur, fleksibel, dan mudah dipelihara. Pada akhir 1980-an, kompleksitas software membuat kode semakin sulit dipahami, dikembangkan, dan rentan terhadap bug. Beberapa prinsip kemudian diperkenalkan oleh tokoh seperti Barbara Liskov dengan Liskov Substitution Principle (LSP) pada 1987 dan Bertrand Meyer dengan Open/Closed Principle (OCP) pada 1988. Prinsip-prinsip tersebut bertujuan membuat desain OOP lebih konsisten dan mudah beradaptasi terhadap perubahan.&lt;/p&gt;

&lt;p&gt;Pada awal 2000-an, Robert C. Martin (Uncle Bob) menggabungkan lima prinsip desain yang sudah ada menjadi satu konsep yang dikenal sebagai SOLID: Single Responsibility Principle (SRP), Open/Closed Principle (OCP), Liskov Substitution Principle (LSP), Interface Segregation Principle (ISP), dan Dependency Inversion Principle (DIP). Sejak saat itu, SOLID menjadi salah satu landasan penting dalam pengembangan software modern karena membantu developer membuat kode yang modular, scalable, maintainable, dan lebih mudah beradaptasi terhadap perubahan.&lt;/p&gt;

&lt;p&gt;Artikel ini diharapkan dapat memberikan pemahaman penerapan SOLID di bahasa go dan sebagai reminder pribadi saat merasa bahwa kode yang saya tulis terasa tidak rapi dan sulit dipahami.&lt;/p&gt;

&lt;p&gt;kenapa kita perlu setidaknya mengetahui SOLID principle ini? menulis kode biasanya hanya sekedar membuat kode yang berfungsi sesuai kebutuhan saja, tetapi seiring berjalannya waktu kadang kita akan menyadari bahwa kode yang berfungsi saja tidak cukup. kode yang tidak terstruktur dengan baik akan menjadi mimpi buruk saat harus diperbaiki atau di optimize. &lt;/p&gt;

&lt;p&gt;Berikut beberapa alasan mengapa kadang solid principle ini perlu untuk di ikuti:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;kode yang terstruktur dengan baik tidak hanya lebih mudah untuk dimengerti, tetapi juga memudahkan tim lain yang mungkin harus bekerja dengan kode yang orang lain tulis.&lt;/li&gt;
&lt;li&gt;mendesain kode yang fleksibel dan mudah diperluas membuat perubahan dapat dilakukan tanpa mempengaruhi bagian kode yang lain&lt;/li&gt;
&lt;li&gt;membagi kode ke dalam tanggung jawab yang terpisah memudahkan dalam memperbaiki bug dengan lebih cepat dan efisien.&lt;/li&gt;
&lt;li&gt;kode yang modular dan bersih memudahkan dalam memahami bagian-bagian progam dengan mudah.&lt;/li&gt;
&lt;li&gt;membantu dalam pembuatan code skala besar yang scalable seiring bertambahnya fitur fitur lain nya.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Single Reponsibility Principle (SRP)&lt;/strong&gt;&lt;br&gt;
Single Responsibility Principle merupakan prinsip yang menyatakan bahwa sebuah kelas harus hanya memiliki satu tanggung jawab yang spesifik&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open/Closed Principle (OCP)&lt;/strong&gt;&lt;br&gt;
Open Closed Principle merupakan prinsip yang menyatakan bahwa sebuah entitas perangkat lunak terbuka untuk ekstensi atau menambahkan fitur baru tanpa mengubah code yang sudah ada&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Liskov Subtitution Principle (LSP)&lt;/strong&gt;&lt;br&gt;
Liskov Substitution Principle merupakan prinsip yang menyatakan bahwa kelas turunan harus dapat menggantikan kelas dasarnya tanpa mengubah sifatnya&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interface Segregation Principle (ISP)&lt;/strong&gt;&lt;br&gt;
Interface Segregation Principle merupakan prinsip yang menyatakan bahwa sebuah klien tidak seharusnya dipaksa untuk bergantung pada metode-metode yang tidak digunakannya atau interface yang terlalu besar harus dipisah menjadi beberapa interface yang lebih spesifik sesuai dengan kebutuhan&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency Inversion Principle (DIP)&lt;/strong&gt;&lt;br&gt;
Dependency Inversion Principle merupakan prinsip yang menyatakan bahwa modul tingkat tinggi tidak boleh bergantung pada modul tingkat rendah. Keduanya harus bergantung pada abstraksi&lt;/p&gt;

&lt;p&gt;References:&lt;br&gt;
&lt;a href="https://emmanueladeyemi180.medium.com/a-structured-guide-to-the-solid-principles-of-object-oriented-programming-oop-903c311489d1" rel="noopener noreferrer"&gt;https://emmanueladeyemi180.medium.com/a-structured-guide-to-the-solid-principles-of-object-oriented-programming-oop-903c311489d1&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>go</category>
      <category>solidprinciples</category>
      <category>dolearncode</category>
    </item>
    <item>
      <title>Test Post Part 1</title>
      <dc:creator>Arif Bugaresa</dc:creator>
      <pubDate>Tue, 22 Sep 2026 07:01:49 +0000</pubDate>
      <link>https://dev.to/arifbugaresa/test-post-part-1-3f76</link>
      <guid>https://dev.to/arifbugaresa/test-post-part-1-3f76</guid>
      <description>&lt;p&gt;test&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Test Post</title>
      <dc:creator>Arif Bugaresa</dc:creator>
      <pubDate>Tue, 22 Sep 2026 07:01:22 +0000</pubDate>
      <link>https://dev.to/arifbugaresa/test-post-2gjb</link>
      <guid>https://dev.to/arifbugaresa/test-post-2gjb</guid>
      <description>&lt;p&gt;Linked Url&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/arifbugaresa/test-post-part-1-3f76" class="crayons-story__hidden-navigation-link"&gt;Test Post Part 1&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/arifbugaresa" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4136753%2F9fb4bf86-057c-49fd-b96f-6f1a01df970a.png" alt="arifbugaresa profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/arifbugaresa" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Arif Bugaresa
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Arif Bugaresa
                
                
              
              &lt;div id="story-author-preview-content-4713162" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/arifbugaresa" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4136753%2F9fb4bf86-057c-49fd-b96f-6f1a01df970a.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Arif Bugaresa&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/arifbugaresa/test-post-part-1-3f76" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 22&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/arifbugaresa/test-post-part-1-3f76" id="article-link-4713162"&gt;
          Test Post Part 1
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/arifbugaresa/test-post-part-1-3f76#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
  </channel>
</rss>
