Saya baru saja mengalami "masalah menarik", yang saya ingin pendapat Anda tentang:
Saya mengembangkan sistem dan karena berbagai alasan (artinya: abstraksi, kemandirian teknologi, dll) kami membuat jenis kami sendiri untuk bertukar informasi.
Misalnya: jika ada metode yang disebut SendEmail dan dipanggil oleh logika bisnis, cara itu memiliki parameter tipe OurCompany.EMailMessage, yang merupakan objek yang sepenuhnya independen teknologi dan hanya berisi "data yang relevan dengan bisnis" (untuk Misalnya, tidak ada informasi tentang penyandian kepala).
Di dalam fungsi SendEmail, kami mendapatkan informasi ini dari objek EMailMEssage kami dan membuat objek MailMessage (yang ini spesifik untuk technolgy) sehingga dapat dikirim melalui jaringan.
Seperti yang sudah Anda ketahui, kelas kami memiliki nama yang sangat mirip dengan kelas bahasa "asli". Masalahnya adalah: ini persis seperti apa mereka, pesan email, sehingga sulit untuk menemukan nama lain yang berarti bagi mereka.
Apakah Anda sering mengalami masalah ini? Bagaimana Anda mengelola itu?
Sunting: @mgkrebbs hanya berkomentar tentang menggunakan nama yang sepenuhnya memenuhi syarat. Ini adalah pendekatan kami saat ini, tetapi sedikit terlalu bertele-tele, IMHO. Saya ingin sesuatu yang lebih bersih, jika memungkinkan.
sumber
Jawaban:
Ini adalah masalah tentang namespace yang akan Anda gunakan untuk proyek Anda.
Pada dasarnya namespace adalah kumpulan kata kunci yang disediakan oleh semua kelas Anda dan / atau semua kelas yang ingin Anda gunakan dalam proyek Anda (termasuk kelas standar yang biasanya disediakan dengan bahasa / kompiler / IDE).
Karena namespace adalah kumpulan, beberapa aturan pada dasarnya diterapkan untuk mencegah pembuatan istilah yang berantakan tanpa perilaku yang terkait, dan beberapa bahasa seperti C # juga memungkinkan Anda untuk mendefinisikan namespace Anda sendiri seperti biasa dan juga menggunakannya di kelas lain.
Jangan bingung ruang nama dengan kata kunci dasar bahasa, keduanya adalah kumpulan kata kunci tetapi dengan perbedaan besar antara keduanya: Anda dapat memodifikasi ruang nama tetapi Anda biasanya tidak dapat mengubah kata kunci dasar suatu bahasa. Jumlah antara namespace yang telah Anda gunakan dalam proyek Anda dan kata kunci dasar bahasa yang Anda gunakan memberi Anda jumlah total kata kunci.
Topik ini banyak dibahas di internet, saya dapat menyarankan pencarian dasar dengan istilah "namespace [bahasa Anda]" o sesuatu seperti itu. Saya tidak langsung menjawab pertanyaan Anda hanya karena Anda dapat memiliki pendekatan berbeda untuk berbagai bahasa.
sumber
Yah tim pengembangan lama saya gunakan untuk menambahkan akronim aplikasi di setiap kelas yang disesuaikan. Kami memiliki misalnya kelas ABCEmail .
Saya pikir ini lebih mudah daripada mengandalkan namespace tetapi juga bisa menjadi solusi pelengkap untuk penggunaan namespace.
Last but not least, karena Anda membuat objek baru, itu berarti objek asli tidak menjawab kebutuhan Anda sehingga nama File Email Anda dapat CustomizedEmail , AdvancedEmail ... dll
sumber
OAEmail
lebih baik dari ituOurApplication.Email
?OAEMail
memiliki dampak pada setiap bagian dari perangkat lunak, sedangkan notasi namespace hanya berdampak di sana di mana konversi terjadi dan kedua kelas digunakan dalam file sumber yang sama.Bahasa apa yang Anda gunakan? Jawabannya khusus bahasa. Secara umum jawabannya adalah 'gunakan namespaces'. Saya hampir tidak akan pernah memotong nama tipe untuk menghindari konflik dengan beberapa namespace eksternal.
Dalam satu aplikasi Java, cukup umum untuk memiliki nama kelas yang sama (misalnya "Tanggal") yang didefinisikan dalam setengah lusin ruang nama. Jika satu kelas perlu menggunakan dua kelas Date yang terpisah, maka salah satu kelas Date harus sepenuhnya memenuhi syarat di mana pun itu muncul, karena Java tidak mendukung alias tipe. Dalam C ++ hidup lebih mudah; Anda bisa mengganti nama salah satunya dengan typedef.
sumber
Itu benar-benar tergantung pada bahasa yang Anda gunakan. Di c ++ dan java, masalah ini diselesaikan dengan menggunakan namespaces. Saya menggunakan c ++, dan kebetulan saya mendapat kelas yang berbeda dengan nama yang sama. Itu bukan masalah, karena mereka berada di ruang nama yang berbeda.
Dalam bahasa lain, tidak ada jalan lain selain memberikan nama yang berbeda.
sumber
xyz123
dan masih berfungsi sama. Saya tidak melihat cara lain maka akan bertele-tele (Anda mengatakan dalam komentar bahwa Anda mencoba menghindarinya).Pertanyaan Anda sangat bagus. Bagaimana jika Anda awali metode Anda dengan awalan seperti U (atau u) atau cls (kependekan dari kelas)? Sebagai contoh:
clsEMailMEssage atau uEMailMEssage
Ini tidak memerlukan banyak pengetikan dan Anda dapat langsung mengetahui bahwa jenisnya adalah milik Anda.
Sunting - Sebagai tanggapan dari 2 komentar pertama:
Saya ingin mengarahkan perhatian pembaca pada fakta bahwa: Tidak semua notasi Hongaria diciptakan sama. Kita harus membedakan antara Sistem Hungaria dan Aplikasi Hungaria , saya berasumsi bahwa saran di atas mengikuti tipe Apps Hungaria, yang tidak berbahaya.
Kerugian yang terkait dengan notasi Sistem Hungaria seperti dalam penamaan ID suatu intID tidak ada dalam saran di atas.
Untuk lebih lanjut tentang ini, lihat di: Membuat Kode yang Salah Terlihat Salah - Joel On Software
sumber