Mendemistifikasi prinsip Hukum Demeter

Hukum Demeter (atau Prinsip Pengetahuan Terkecil) adalah pedoman desain untuk mengembangkan aplikasi perangkat lunak. Pertama kali dibahas di Northeastern University pada tahun 1987, prinsip ini menyatakan bahwa suatu objek tidak boleh mengetahui detail internal objek lain. Ini dirancang untuk mempromosikan kopling longgar dalam desain perangkat lunak.

Perhatikan bahwa kopling dapat didefinisikan sebagai tingkat saling ketergantungan yang ada antara modul perangkat lunak dan seberapa dekat modul tersebut terhubung satu sama lain. Semakin banyak kopling antar komponen dalam suatu aplikasi, semakin sulit untuk memodifikasi dan memeliharanya dari waktu ke waktu. Itu selalu merupakan praktik yang baik untuk merancang sistem yang lebih mudah untuk diuji dan dipelihara dengan memastikan bahwa komponen dalam aplikasi digabungkan secara longgar. Anda dapat mempelajari lebih lanjut tentang kohesi dan kopling dari artikel saya di sini.

Memahami prinsip Law of Demeter

Prinsip Law of Demeter menyatakan bahwa modul seharusnya tidak memiliki pengetahuan tentang detail bagian dalam dari objek yang dimanipulasi. Dengan kata lain, komponen perangkat lunak atau suatu objek tidak boleh memiliki pengetahuan tentang kerja internal objek atau komponen lain. Mari kita pahami Hukum Demeter dengan sebuah contoh.

Pertimbangkan tiga kelas yaitu - A, B, dan C - dan objek dari kelas ini - objA, objB, dan objC masing-masing. Sekarang anggaplah objA bergantung pada objB, yang pada gilirannya menyusun objC. Dalam tampilan ini, objA dapat memanggil metode dan properti objB tetapi tidak dapat menjalankan objC.

Prinsip Law of Demeter memanfaatkan enkapsulasi untuk mencapai isolasi ini dan mengurangi kopling di antara komponen aplikasi Anda. Ini membantu dalam meningkatkan kualitas kode dan mempromosikan fleksibilitas dan pemeliharaan kode yang lebih mudah. Manfaat mengikuti Law of Demeter adalah Anda dapat membangun perangkat lunak yang mudah dipelihara dan dapat disesuaikan dengan perubahan di masa mendatang.

Pertimbangkan kelas C yang memiliki metode M. Sekarang anggaplah Anda telah membuat turunan dari kelas C bernama O. Hukum Demeter menentukan bahwa metode M dapat memanggil tipe berikut. Atau properti kelas harus memanggil tipe berikut hanya anggota:

  • Objek yang sama, yaitu objek “O” itu sendiri
  • Objek yang telah diteruskan sebagai argumen ke metode "M"
  • Objek lokal, yaitu objek yang telah dibuat di dalam metode "M"
  • Objek global yang dapat diakses oleh objek "O"
  • Objek komponen langsung dari objek "O"

Berikut adalah daftar kode yang menggambarkan kelas dan anggotanya yang mematuhi prinsip Hukum Demeter. Saya telah menyebutkan komentar di mana pun dapat diterapkan untuk kejelasan.

public class LawOfDemeterExample

    {

        //This is an instance in the class scope

        //and hence this instance can be accessed by any members of this class

        AnotherClass instance = new AnotherClass();

       public void SampleMethodFollowingLoD(Test obj)

        {         

            DoNothing(); //This is a valid call as you are calling a method of the same class

             object data = obj.GetData(); //This is also valid since you are calling a method

            //on an instance that has been passed as a parameter           

             int result = instance.GetResult();  //This is also a valid call as you are calling

            //a method on an instance locally created

        }

        private void DoNothing()

        {

            // Write some code here

        }

    }

Berikut adalah dua kelas lain yang Anda perlukan untuk mengkompilasi kode di atas.

public class AnotherClass

    {

        public int GetResult()

        {

            return -1;

        }

    }

    public class Test

    {

        public object GetData()

        {

            return null;

        }

    }

Sekarang, lihat kelas LawOfDemeterExample yang ditunjukkan di atas. Kode ini cukup jelas. Sekarang Anda mungkin bertanya-tanya apakah Hukum Demeter hanya berlaku untuk metode. Jawabannya adalah tidak". Prinsip Hukum Demeter berlaku untuk properti juga.

Hukum Pelanggaran Prinsip Demeter

Pada contoh kode pertama yang dijelaskan sebelumnya, kami memulai diskusi kami tentang topik ini dengan mengikuti prinsip Hukum Demeter. Mari kita pahami apa yang terjadi jika kita tidak mengikuti asas ini. Pertimbangkan contoh kode ini.

var data = new A().GetObjectB().GetObjectC().GetData();

Dalam contoh ini, klien harus bergantung pada kelas A, B, dan C. Dengan kata lain, ini digabungkan dengan instance kelas A, B, dan C. Jika di masa mendatang kelas ini berubah, Anda akan mengalami masalah karena Anda memaparkan diri Anda pada perubahan yang mungkin terjadi di salah satu kelas ini di masa mendatang.