Menyatakan prinsip Hukum Demeter

Undang-undang Demeter (atau Prinsip Pengetahuan Paling Rendah) adalah garis panduan reka bentuk untuk mengembangkan aplikasi perisian. Pertama kali dibincangkan di Northeastern University pada tahun 1987, prinsip ini menyatakan bahawa objek tidak boleh mengetahui perincian dalaman objek lain. Ia dirancang untuk mempromosikan gandingan longgar dalam reka bentuk perisian.

Perhatikan bahawa gandingan boleh didefinisikan sebagai tahap saling bergantung yang wujud antara modul perisian dan seberapa dekat modul tersebut saling terhubung. Semakin banyak gandingan antara komponen dalam aplikasi, semakin sukar untuk mengubah dan mengekalkannya dari masa ke masa. Menjadi amalan yang baik untuk merancang sistem yang lebih mudah diuji dan dikendalikan dengan memastikan bahawa komponen dalam aplikasi digabungkan secara longgar. Anda boleh mengetahui lebih lanjut mengenai perpaduan dan gandingan dari artikel saya di sini.

Memahami prinsip Hukum Demeter

Prinsip Hukum Demeter menyatakan bahawa modul tidak boleh mempunyai pengetahuan mengenai perincian dalaman objek yang dimanipulasinya. Dengan kata lain, komponen perisian atau objek tidak boleh mempunyai pengetahuan mengenai kerja dalaman objek atau komponen lain. Mari kita fahami Hukum Demeter dengan contoh.

Pertimbangkan tiga kelas iaitu - A, B, dan C - dan objek kelas ini - objA, objB, dan objC masing-masing. Sekarang anggap objA bergantung pada objB, yang seterusnya menyusun objC. Dalam scenerio ini, objA boleh menggunakan kaedah dan sifat objB tetapi tidak objC.

Prinsip Hukum Demeter memanfaatkan enkapsulasi untuk mencapai pengasingan ini dan mengurangkan gandingan antara komponen aplikasi anda. Ini membantu dalam meningkatkan kualiti kod dan meningkatkan fleksibiliti dan penyelenggaraan kod yang lebih mudah. Manfaat mematuhi Undang-undang Demeter adalah anda dapat membina perisian yang mudah dikendalikan dan disesuaikan dengan perubahan masa depan.

Pertimbangkan kelas C yang mempunyai kaedah M. Sekarang anggap anda telah membuat contoh kelas C bernama O. Hukum Demeter menetapkan bahawa kaedah M dapat memanggil jenis-jenis berikut. Atau harta benda kelas harus menggunakan jenis berikut ahli sahaja:

  • Objek yang sama, iaitu objek "O" itu sendiri
  • Objek yang telah disampaikan sebagai argumen untuk metode "M"
  • Objek tempatan, iaitu objek yang telah dibuat di dalam metode "M"
  • Objek global yang dapat diakses oleh objek "O"
  • Objek komponen langsung dari objek "O"

Berikut adalah senarai kod yang menggambarkan kelas dan anggotanya yang mematuhi prinsip Undang-undang Demeter. Saya telah menyebut komen di mana sahaja berlaku 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 menyusun kod di atas.

public class AnotherClass

    {

        public int GetResult()

        {

            return -1;

        }

    }

    public class Test

    {

        public object GetData()

        {

            return null;

        }

    }

Sekarang, rujuk kelas LawOfDemeterExample yang ditunjukkan di atas. Kodnya cukup jelas. Anda mungkin tertanya-tanya apakah Hukum Demeter hanya berlaku untuk kaedah. Jawapannya adalah tidak". Prinsip Hukum Demeter berlaku untuk harta tanah juga.

Hukum pelanggaran Prinsip Demeter

Dalam contoh kod pertama yang dijelaskan sebelumnya, kami memulakan perbincangan kami mengenai topik ini dengan mematuhi prinsip Hukum Demeter. Mari fahami apa yang berlaku apabila kita tidak mengikut prinsip ini. Pertimbangkan contoh kod ini.

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

Dalam contoh ini, pelanggan harus bergantung pada kelas A, B dan C. Dengan kata lain, ia digabungkan dengan contoh kelas A, B dan C. Sekiranya di masa depan kelas ini berubah, anda akan menghadapi masalah kerana anda mendedahkan diri anda kepada perubahan yang mungkin berlaku di mana-mana kelas ini pada masa akan datang.