Perbedaan antara Sumber Tunggal Kebenaran dan Prinsip Tanggung Jawab Tunggal?


9

Jadi saya baru tahu tentang istilah sumber tunggal kebenaran saat menonton serial video tentang wawancara kode program.

Dari apa yang saya pahami berarti bahwa satu-satunya sumber kebenaran adalah enkapsulasi dari segala jenis operasi / logika yang dapat digunakan beberapa kali.

Itu mengingatkan saya sangat kuat tentang SRP yang hampir sama dalam arti bahwa itu merangkum operasi dan / atau logika tertentu yang mungkin digunakan untuk beberapa kali.

Apakah ada sesuatu yang sangat halus yang saya lewatkan di sini?

Terima kasih atas waktunya.

Jawaban:


12

Mereka adalah dua prinsip yang berbeda. Cukup banyak satu-satunya kesamaan mereka adalah kata "lajang."

Sumber Tunggal Kebenaran adalah hasil akhir dari proses normalisasi basis data. Setiap informasi entitas disimpan satu kali, dan hanya sekali.

Satu Sumber Kebenaran menjelaskan mengapa kami menempatkan Pelanggan di satu meja, dan Produk di meja lain. Dengan mengaitkan pelanggan dengan produk, menggunakan tabel CustomerProducts, kami menghindari menyimpan pelanggan atau produk di dua tempat yang berbeda, dan sebagai gantinya meletakkan pointer di tabel CustomerProducts yang mengarah ke setiap pelanggan dan produk. Ini juga memungkinkan kami untuk mengaitkan banyak pelanggan dengan suatu produk, dan beberapa produk dengan pelanggan, tanpa menggandakan informasi seperti nama produk atau harganya.

Memiliki Sumber Kebenaran Tunggal (setiap datum disimpan hanya di satu tempat) berarti bahwa, ketika Anda mengubah datum itu, seluruh sistem melihat perubahan yang sama pada saat yang bersamaan. Bandingkan dengan banyak sumber kebenaran, di mana Anda harus mengubah datum di semua tempat penyimpanannya. Bagian sistem yang berbeda mungkin melihat dua nilai berbeda untuk datum yang sama, setidaknya untuk sementara.

Prinsip Tanggung Jawab Tunggal (SRP) berarti bahwa suatu kelas hanya boleh memiliki satu tanggung jawab atau satu alasan untuk berubah. Contoh yang diberikan Fowler adalah kelas Modem:

interface Modem
{
    public void dial(String phoneNumber);
    public void hangup();
    public void send(char c);
    public char recv();
}

Kelas ini melanggar SRP, karena memiliki dua tanggung jawab utama: membangun koneksi, dan mengirim data. Untuk memperbaiki masalah, Anda akan membagi antarmuka menjadi dua antarmuka yang berbeda: antarmuka koneksi, dan antarmuka komunikasi. Antarmuka pertama akan berisi metode dial dan hangup, dan antarmuka kedua akan berisi metode kirim dan terima.

SRP bukan hukum, tetapi hanya prinsip. Terkadang SRP dilanggar untuk kenyamanan atau alasan lain. Hal yang sama berlaku untuk normalisasi basis data; terkadang data disimpan dalam bentuk denormalized (termasuk beberapa duplikasi) untuk kinerja atau alasan lain.

Ketidaktahuan Ketekunan adalah bentuk lain dari SRP: kelas seharusnya tidak memiliki pengetahuan tentang cara menyimpan dirinya ke penyimpanan data. Itu bukan tanggung jawabnya; itu adalah tanggung jawab beberapa kelas lain. Jika ini tidak terjadi, Anda harus mengubah setiap kelas yang menggunakan penyimpanan data jika Anda ingin mengubah penyimpanan data ke beberapa jenis penyimpanan data lainnya.


7

Umm, tidak? Anda tampaknya kehilangan perbedaan yang cukup signifikan !

Prinsip tanggung jawab tunggal tidak merangkum apapun. Itu tidak menduplikasi perilaku / kode / logika. Yang dikatakannya adalah bahwa kelas harus melakukan satu hal. Anda masih dapat memiliki dua kelas yang melakukan hal yang sama. Prinsipnya benar-benar baik-baik saja dengan itu.

Satu-satunya sumber kebenaran tidak merangkum apa pun. Ini adalah pedoman yang membantu Anda menjelaskan desain Anda. Sangat sering, Anda memiliki dua versi atau lebih dari data yang sama. Satu di database, satu di cache, satu di memori, satu di sisi klien, satu di sqllite duduk di PC di suatu tempat ... Sumber kebenaran tunggal adalah sesuatu yang Anda tetapkan. Anda mengatakan bahwa satu adalah yang menang ketika sumber Anda tidak setuju. Itu versi adalah kebenaran.

Singkatnya, ini jelas-jelas tidak berhubungan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.