Menulis objek Pengguna di Swift, meskipun pertanyaan saya terkait dengan bahasa yang sangat diketik. Pengguna dapat memiliki banyak tautan (FacebookProfile, InstagramProfile, dll). Beberapa pertanyaan tentang ini.
- Apakah praktik yang baik untuk membungkus tautan di objek mereka sendiri?
Pengguna struct { var firstName: string v lastName: string var email: string var links: Links }
Tautan struct { var facebook: string var instagram: string var twitter: string }
Atau haruskah mereka longgar? Saya tahu secara teknis kedua cara itu baik-baik saja, tetapi bertanya-tanya apakah ada pendekatan yang disarankan, secara umum - terutama untuk keterbacaan.
struct User {
var firstName: string
var lastName: string
var email: string
var facebookLink: string
var twitterLink: string
var instagramLink: string
}
Dalam skenario seperti ini, haruskah tautan menjadi koleksi / daftar? Saya pikir itu bukan daftar karena ada sejumlah opsi tautan yang tersedia, dan bukan jumlah yang terus bertambah. Apakah pemikiran saya benar?
Apakah praktik yang baik untuk menempatkan metode jaringan saya di dalam objek Pengguna, seperti getUsers, getUser, updateUser?
Saya tahu ini bisa subjektif, tetapi saya mencoba memahami apa praktik terbaik di sekitar situasi yang sama. Akan menghargai setiap petunjuk.
FacebookProfile, InstagramProfile, ...
Saya pikir OP sudah menjawab pertanyaan itu. Bahasanya memberi tahu kami bahwa Pengguna mungkin tidak memiliki satu atau beberapa profil yang terkait dengan jejaring sosial. Tetapi programmer di dalam dirinya telah mengubah elemen ini menjadi tautan belaka. Mengapa bukan koleksiProfiles
? Saya setuju dengan CandiedOrange. Anda terlalu banyak berasumsi tentang masa depan. Jejaring sosial baru mungkin muncul. Yang sebenarnya mungkin hilang. Pengguna dapat pergi dan datang dari satu jaringan ke yang lain.link1
,link2
,link3
, kebutuhan untuk koleksi akan lebih jelas. Namun, fakta bahwa Anda memberi kolom nama yang lebih bermakna tidak mengubah fakta bahwa itu adalah kumpulan data yang berulang.Anda hampir jatuh ke dalam perangkap "Saya melihat kemungkinan teknis".
Hanya karena Anda melihat sifat umum di antara item tidak berarti masuk akal untuk menerapkan agregasi pada mereka. Agregasi harus berarti sesuatu. Bukan pada tingkat teknis tetapi di domain masalah Anda.
Mereka semua tautan baik-baik saja, tetapi dalam konteks kelas pengguna, apakah itu berarti apa-apa? Tidak. Ini sama tidak berartinya dengan sub-grup yang menggunakan kelas yang bernama "string" dan "angka".
Masalah dengan hal semacam ini adalah mengaburkan model Anda. Ini memaksa pembaca kode untuk memutuskan yang bermakna dari yang tidak berarti, sebelum memiliki pemahaman penuh tentang domain.
Tidak ada yang pernah berbicara tentang tautan pengguna. Akan berbeda jika Anda akan memanggil SocialNetworkIds agregasi Anda. Karena itu akan benar-benar berarti sesuatu, itu akan menjadi milik Pengguna yang sebenarnya daripada koleksi teknis yang sewenang-wenang.
sumber
link1
,link2
,link3
? Desain struktur data tidak tergantung pada nama bidang, jadi contoh saya setara secara fungsional. Ini masalah futureproofing. YAGNI umumnya akan berlaku, tetapi jika ada, media sosial telah membuktikan dirinya rentan terhadap popularitas dan perubahan viral. Menghindari pembangunan kembali untuk setiap situs media sosial populer baru tampaknya diinginkan. Kalau tidak, Anda berisiko jatuh ke "bidang apa lagi?" jebakan, yang bisa membuat hutang besar.Secara umum, saya pikir masuk akal untuk memiliki tautannya sendiri
struct
jika Anda cenderung menerapkan operasi yang sama untuk masing-masing, dan terutama jika Anda selalu melakukan operasi yang sama pada mereka semua. Jika mereka untuk tujuan yang tidak terkait dalam aplikasi Anda, maka saya akan membuatnya terpisah. Misalnya, jika mereka adalah beranda pengguna, situs web penyedia asuransi kesehatan mereka, dan tautan ke situs berita favorit mereka, saya mungkin tidak akan mengelompokkan mereka karena mereka tampaknya tidak terkait. Tetapi untuk 3 situs media sosial, sepertinya mereka akan diperlakukan sama di suatu aplikasi, dan karena itu mungkin harus dikelompokkan bersama. Saya akan menggunakan nama yang lebih deskriptifLinks
. (Jenis tautan apa? Untuk tujuan apa di aplikasi Anda?)Saya setuju dengan pemikiran Anda tentang # 2. Seperti disebutkan di atas, jika angka itu akan tumbuh atau menjadi variabel, daftar atau koleksi lain akan menjadi pilihan yang baik, tetapi tidak untuk skenario yang telah Anda jelaskan.
Saya tidak akan menempatkan metode jaringan di dalam objek yang menyimpan data yang diambil oleh jaringan. Dari mana data berasal, dan cara mendapatkannya biasanya tidak relevan dengan tujuan utama suatu kelas. Bagaimana jika di masa depan Anda ingin mendapatkan beberapa data dari disk? Atau ingin pengguna memasukkannya? Cukup jauh menyusuri jalan itu dan sebuah
User
kelas sederhana harus memiliki kode untuk menangani setiap metode entri dan pengambilan data yang memungkinkan. BuatUser
kelas tetap dan pertahankan data saat berada di memori. Segala sesuatu yang lain dapat ditangani oleh kelas yang lebih tepat.sumber