Merupakan kebiasaan yang BURUK dan sangat MENGUMPULKAN praktik mengutip Joshua Bloch tanpa memahami dasar-dasar fundamentalisme nol.
Saya belum membaca apa pun Joshua Bloch, begitu juga
- dia adalah programmer yang mengerikan
- atau orang-orang yang saya kutip dari kutipannya (Joshua adalah nama bocah lelaki yang saya anggap) hanya menggunakan bahannya sebagai naskah keagamaan untuk membenarkan perangkat lunak pengampunan keagamaan mereka.
Seperti dalam fundamentalisme Alkitab, semua hukum Alkitab dapat disimpulkan
- Cintai Identitas Fundamental dengan segenap hati dan pikiran Anda
- Cintailah sesamamu seperti dirimu sendiri
dan demikian pula fundamentalisme rekayasa perangkat lunak dapat disimpulkan oleh
- mengabdikan diri Anda pada dasar-dasar nol dengan semua kekuatan dan pikiran pemrograman Anda
- dan mengabdikan diri untuk keunggulan sesama programer Anda seperti yang Anda lakukan untuk diri sendiri.
Juga, di antara kalangan fundamentalis alkitabiah, sebuah akibat wajar yang kuat dan masuk akal diambil
- Pertama-tama cintai dirimu sendiri. Karena jika Anda tidak terlalu mencintai diri sendiri, maka konsep "cintai sesamamu seperti dirimu sendiri" tidak terlalu berpengaruh, karena "betapa Anda sangat mencintai diri sendiri" adalah garis datum di mana Anda akan mencintai orang lain.
Demikian pula, jika Anda tidak menghormati diri Anda sebagai seorang programmer dan hanya menerima pernyataan dan ramalan dari beberapa guru pemrograman-TANPA TANPA mempertanyakan dasar-dasar, kutipan dan kepercayaan Anda pada Joshua Bloch (dan sejenisnya) tidak ada artinya. Dan karena itu, Anda benar-benar tidak akan menghargai sesama programer Anda.
Hukum dasar pemrograman perangkat lunak
- kemalasan adalah keutamaan programmer yang baik
- Anda harus membuat kehidupan pemrograman Anda semudah, semalas dan karena itu seefektif mungkin
- Anda harus membuat konsekuensi dan isi perut pemrograman Anda semudah itu, semalas dan karenanya seefektif mungkin bagi para programmer-tetangga Anda yang bekerja dengan Anda dan mengambil isi perut pemrograman Anda.
Konstanta antarmuka-pola adalah kebiasaan buruk ???
Di bawah hukum pemrograman yang efektif dan bertanggung jawab secara fundamental, apa aturan agama ini?
Cukup baca artikel wikipedia tentang konstanta antarmuka-pola ( https://en.wikipedia.org/wiki/Constant_interface ), dan alasan konyol menyatakannya terhadap konstanta antarmuka-pola.
Whatif-No IDE? Siapa di bumi sebagai programmer perangkat lunak tidak akan menggunakan IDE? Sebagian besar dari kita adalah programmer yang lebih suka tidak harus membuktikan memiliki survivalisticism aescetic macho melalui menghindari penggunaan IDE.
- Juga - tunggu pendukung kedua pemrograman mikro-fungsional sebagai cara tidak membutuhkan IDE. Tunggu sampai Anda membaca penjelasan saya tentang normalisasi data-model.
Mengotori namespace dengan variabel yang tidak digunakan dalam lingkup saat ini? Bisa jadi penganjur pendapat ini
- tidak menyadari, dan perlunya, normalisasi data-model
Menggunakan antarmuka untuk menegakkan konstanta adalah penyalahgunaan antarmuka. Pendukung seperti memiliki kebiasaan buruk
- tidak melihat bahwa "konstanta" harus diperlakukan sebagai kontrak. Dan antarmuka digunakan untuk menegakkan atau memproyeksikan kepatuhan terhadap kontrak.
Sulit jika bukan tidak mungkin untuk mengubah antarmuka menjadi kelas yang diimplementasikan di masa depan. Hah .... hmmm ... ???
- Mengapa Anda ingin terlibat dalam pola pemrograman seperti itu sebagai mata pencaharian Anda yang gigih? TKI, mengapa mengabdikan diri pada kebiasaan pemrograman AMBIVALEN dan buruk?
Apa pun alasannya, TIDAK ADA VALID EXCUSE ketika datang ke FUNDAMENTALLY EFFECTIVE engineering software untuk mendelegitimasi atau umumnya mencegah penggunaan konstanta antarmuka.
Tidak masalah apa maksud asli dan kondisi mental para pendiri bangsa yang menyusun Konstitusi Amerika Serikat. Kita dapat memperdebatkan maksud asli dari para pendiri bangsa tetapi yang saya pedulikan hanyalah pernyataan tertulis dari Konstitusi AS. Dan itu adalah tanggung jawab setiap warga negara AS untuk mengeksploitasi fundamentalisme sastra tertulis, bukan tujuan pendiri tidak tertulis, Konstitusi AS.
Demikian pula, saya tidak peduli apa maksud "asli" dari pendiri platform Java dan bahasa pemrograman untuk antarmuka. Apa yang saya pedulikan adalah fitur efektif yang disediakan oleh spesifikasi Java, dan saya bermaksud untuk mengeksploitasi fitur-fitur itu sepenuhnya untuk membantu saya memenuhi hukum dasar pemrograman perangkat lunak yang bertanggung jawab. Saya tidak peduli jika saya dianggap "melanggar niat untuk antarmuka". Saya tidak peduli apa yang dikatakan Gosling atau seseorang Bloch tentang "cara yang tepat untuk menggunakan Java", kecuali apa yang mereka katakan tidak melanggar kebutuhan saya untuk EFEKTIF dalam memenuhi fundamental.
Fundamental adalah Normalisasi Data-Model
Tidak masalah bagaimana model data Anda dihosting atau dikirimkan. Apakah Anda menggunakan antarmuka atau enum atau apa pun, relasional atau tidak-SQL, jika Anda tidak memahami kebutuhan dan proses normalisasi model-data.
Pertama-tama kita harus mendefinisikan dan menormalkan data-model dari serangkaian proses. Dan ketika kita memiliki model-data yang koheren, HANYA kita dapat menggunakan aliran proses dari komponen-komponennya untuk mendefinisikan perilaku fungsional dan memproses blok suatu bidang atau bidang aplikasi. Dan hanya dengan begitu kita dapat mendefinisikan API dari setiap proses fungsional.
Bahkan aspek normalisasi data seperti yang diusulkan oleh EF Codd sekarang sangat ditantang dan sangat ditantang. misalnya pernyataannya tentang 1NF telah dikritik sebagai ambigu, tidak selaras, dan terlalu disederhanakan, seperti halnya sisa pernyataannya terutama dalam munculnya layanan data modern, repo-teknologi dan transmisi. IMO, pernyataan EF Codd harus sepenuhnya dibuang dan set baru pernyataan yang lebih masuk akal secara matematis dirancang.
Kelemahan mencolok Codd's EF dan penyebab ketidakselarasannya pada pemahaman manusia yang efektif adalah keyakinannya bahwa data multi-dimensi, dimensi-bisa-berubah yang dapat dipahami secara manusiawi dapat dirasakan secara efisien melalui serangkaian pemetaan 2-dimensi yang sepotong-sepotong.
Dasar-dasar Normalisasi Data
Apa yang tidak diungkapkan oleh Codd EF.
Dalam setiap data-model yang koheren, ini adalah urutan bertahap dari keterpaduan data-model yang harus dicapai.
- Persatuan dan Identitas contoh data.
- mendesain granularity masing-masing komponen data, di mana granularitasnya berada pada level di mana setiap instance komponen dapat diidentifikasi dan diambil secara unik.
- tidak adanya contoh alias. yaitu, tidak ada sarana di mana identifikasi menghasilkan lebih dari satu contoh komponen.
- Tidak adanya crosstalk misalnya. Tidak ada keharusan untuk menggunakan satu atau lebih contoh komponen lainnya untuk berkontribusi dalam mengidentifikasi contoh komponen.
- Kesatuan dan identitas komponen data / dimensi.
- Kehadiran komponen de-aliasing. Harus ada satu definisi di mana komponen / dimensi dapat diidentifikasi secara unik. Yang merupakan definisi utama dari suatu komponen;
- di mana definisi utama tidak akan menghasilkan pengungkapan sub-dimensi atau komponen-anggota yang bukan bagian dari komponen yang dimaksudkan;
- Cara unik dealiasing komponen. Harus ada satu, dan hanya satu, komponen yang mendefinisikan de-aliasing definisi untuk suatu komponen.
- Ada satu, dan hanya satu, antarmuka definisi atau kontrak untuk mengidentifikasi komponen induk dalam hubungan komponen hierarkis.
- Tidak adanya crosstalk komponen. Tidak ada keharusan untuk menggunakan anggota komponen lain untuk berkontribusi pada identifikasi pasti suatu komponen.
- Dalam hubungan orangtua-anak seperti itu, definisi identifikasi orangtua tidak boleh bergantung pada bagian dari set komponen anggota anak. Komponen anggota dari identitas orang tua harus merupakan identitas anak lengkap tanpa menggunakan referensi salah satu atau semua anak dari seorang anak.
- Penampilan bi-modal atau multi-modal yang lebih dulu dari model-data.
- Ketika ada dua definisi kandidat komponen, itu adalah tanda yang jelas bahwa ada dua model data yang berbeda digabungkan menjadi satu. Itu berarti ada ketidaksesuaian di tingkat model-data, atau tingkat bidang.
- Bidang aplikasi harus menggunakan satu dan hanya satu model data, secara koheren.
- Mendeteksi dan mengidentifikasi mutasi komponen. Kecuali Anda telah melakukan analisis komponen statistik dari data besar, Anda mungkin tidak melihat, atau melihat perlunya memperlakukan, mutasi komponen.
- Suatu model-data mungkin beberapa komponennya bermutasi secara siklis atau bertahap.
- Mode dapat berupa rotasi anggota atau rotasi transposisi.
- Mutasi rotasi anggota dapat menjadi pertukaran komponen anak yang berbeda antar komponen. Atau di mana komponen yang benar-benar baru harus didefinisikan.
- Mutasi transposisi akan bermanifestasi sebagai anggota dimensi bermutasi menjadi atribut, sebaliknya.
- Setiap siklus mutasi harus diidentifikasi sebagai modal data yang berbeda.
- Beri versi setiap mutasi. Sedemikian rupa sehingga Anda dapat mengeluarkan versi model data sebelumnya, saat mungkin diperlukan untuk mengobati mutasi model data yang berusia 8 tahun.
Dalam bidang atau kisi aplikasi-komponen antar-layanan, harus ada satu dan hanya satu model-data yang koheren atau ada sarana untuk model-data / versi untuk mengidentifikasi dirinya sendiri.
Apakah kita masih bertanya apakah kita bisa menggunakan Konstanta Antarmuka? Betulkah ?
Ada masalah normalisasi data yang dipertaruhkan lebih penting daripada pertanyaan biasa ini. JIKA Anda tidak menyelesaikan masalah tersebut, kebingungan yang menurut Anda disebabkan oleh konstanta antarmuka relatif tidak ada. Zilch.
Dari normalisasi data-model maka Anda menentukan komponen sebagai variabel, sebagai properti, sebagai konstanta antarmuka kontrak.
Kemudian Anda menentukan yang masuk ke injeksi nilai, placeholding konfigurasi properti, antarmuka, string akhir, dll.
Jika Anda harus menggunakan alasan untuk mencari komponen yang lebih mudah didiktekan terhadap konstanta antarmuka, itu artinya Anda berada dalam kebiasaan buruk untuk tidak melakukan normalisasi data-model.
Mungkin Anda ingin mengkompilasi model data menjadi rilis vcs. Bahwa Anda bisa mengeluarkan versi data-model yang dapat diidentifikasi dengan jelas.
Nilai yang didefinisikan dalam antarmuka sepenuhnya dijamin tidak dapat diubah. Dan dapat dibagikan. Mengapa memuat serangkaian string terakhir ke kelas Anda dari kelas lain ketika semua yang Anda butuhkan adalah seperangkat konstanta ??
Jadi mengapa tidak mempublikasikan kontrak model data ini? Maksud saya jika Anda dapat mengelola dan menormalkannya secara koheren, mengapa tidak? ...
public interface CustomerService {
public interface Label{
char AssignmentCharacter = ':';
public interface Address{
String Street = "Street";
String Unit= "Unit/Suite";
String Municipal = "City";
String County = "County";
String Provincial = "State";
String PostalCode = "Zip"
}
public interface Person {
public interface NameParts{
String Given = "First/Given name"
String Auxiliary = "Middle initial"
String Family = "Last name"
}
}
}
}
Sekarang saya bisa mereferensikan label kontrak aplikasi saya dengan cara seperti
CustomerService.Label.Address.Street
CustomerService.Label.Person.NameParts.Family
Ini membingungkan isi file jar? Sebagai seorang programmer Java saya tidak peduli dengan struktur toples.
Ini menyajikan kompleksitas untuk swap runtime osgi-termotivasi? Osgi adalah cara yang sangat efisien untuk memungkinkan programmer melanjutkan kebiasaan buruknya. Ada alternatif yang lebih baik daripada osgi.
Atau mengapa tidak? Tidak ada kebocoran Konstanta pribadi ke dalam kontrak yang dipublikasikan. Semua konstanta pribadi harus dikelompokkan ke dalam antarmuka pribadi bernama "Konstanta", karena saya tidak ingin harus mencari konstanta dan saya terlalu malas untuk berulang kali mengetik "private final String".
public class PurchaseRequest {
private interface Constants{
String INTERESTINGName = "Interesting Name";
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Bahkan mungkin ini:
public interface PurchaseOrderConstants {
public interface Properties{
default String InterestingName(){
return something();
}
String OFFICIALLanguage = "Official Language"
int MAXNames = 9;
}
}
Satu-satunya masalah dengan konstanta antarmuka yang patut dipertimbangkan adalah ketika antarmuka diimplementasikan.
Ini bukan "niat asli" dari antarmuka? Seperti saya akan peduli tentang "niat asli" dari para pendiri pendiri dalam menyusun Konstitusi AS, daripada bagaimana Mahkamah Agung akan menafsirkan surat-surat tertulis dari Konstitusi AS ???
Lagi pula, saya tinggal di tanah yang bebas, liar dan rumah yang berani. Berani, bebas, jadilah liar - gunakan antarmuka. Jika sesama programmer saya menolak menggunakan cara pemrograman yang efisien dan malas, apakah saya diwajibkan oleh aturan emas untuk mengurangi efisiensi pemrograman saya agar selaras dengan mereka? Mungkin saya harus, tetapi itu bukan situasi yang ideal.