Apakah memiliki banyak pernyataan penggunaan / impor menunjukkan desain yang buruk atau bau kode?

13

Biasanya, saya melihat beberapa pernyataan menggunakan di bagian atas file kelas. Contoh:

using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;

Tetapi dalam proyek yang sedang saya kerjakan, pada beberapa kesempatan saya melihat 20 atau lebih penggunaan / impor dalam satu file kelas. Apakah ini desain yang buruk? Tampaknya kelas-kelas yang dirancang untuk melakukan satu hal seharusnya hanya bergantung pada beberapa komponen.

Jon Raynor
sumber
1
Visual Studio memiliki opsi untuk menghapus usingpernyataan yang tidak digunakan . Anda mungkin ingin melihat berapa banyak dari 20 yang sedang digunakan.
Dan Pichelman
@Dan -Mereka semua digunakan karena saya telah menggunakan ReSharper untuk menyingkirkan yang tidak terpakai.
Jon Raynor
Sudahkah Anda mencoba menambahkan IoC, mengubahnya menjadi injeksi konstruktor, dan / atau mengubah beberapa titik integrasi menjadi lambda inline untuk melihat apakah itu akan mengurangi jumlah usingpernyataan tanpa harus menambah jumlah kelas? Perlu diingat bahwa peningkatan jumlah kelas atau file sumber akan meningkatkan overhead manajemen kode sumber.
rwong
2
IoC menyembunyikan masalahnya.
Telastyn
1
Beberapa dari hal-hal itu hampir hanya bagian dari bahasa dan gaya pemrograman yang dianjurkan, seperti Collections.Generic dan LINQ, jadi saya tidak perlu khawatir tentang itu. Saya mungkin akan memusatkan perhatian saya pada yang lain. Sebagian besar kelas mungkin tidak perlu melakukan IO secara langsung, jadi, mungkin jika itu ditemukan di mana-mana ada beberapa tanggung jawab atau layering yang buruk, tetapi itu tergantung pada aplikasi.
Erik Eidt

Jawaban:

21

Itu bisa menunjukkan desain yang buruk, ya. Mungkin kelas yang Anda lihat melakukan terlalu banyak hal, tetapi itu juga bisa berarti bahwa ruang nama yang Anda impor benar-benar lebih berpasangan daripada yang disiratkan oleh pemisahan namespace. Itu mungkin karena over-engineer atau over-abstraction, tetapi mungkin juga hanya desain yang tidak selaras dengan penggunaan.

Yang mengatakan, itu bau - kadang-kadang itu membawa Anda ke sesuatu yang buruk, dan kadang-kadang itu hanya alarm palsu.

Telastyn
sumber
Saya pikir "bau kode" yang sebenarnya adalah jika ruang nama yang diimpor semuanya, atau sebagian besar, sangat berbeda tujuannya. Sejujurnya, saya jarang memiliki lebih dari 6 hingga 8 usingdalam satu file C #.
Greg Burghardt
2
Saya ingin memberi Anda +1 kedua jika saya bisa, hanya karena menggunakan istilah "bau kode" dengan benar!
Jörg W Mittag
! @Greg - Saya setuju, biasanya "usings" terkait. Saya pikir dalam hal ini adalah kasus abstraksi karena sekitar 15-20 dari "usings" berasal dari ruang nama aplikasi dan sisanya dari .net framework.
Jon Raynor
2

Kelas tidak boleh lebih besar dan tidak lebih kecil dari yang dibutuhkan untuk menyediakan fungsi yang diinginkan.

Dalam satu aplikasi, saya memiliki kelas enkripsi yang memiliki satu pekerjaan: mengenkripsi data. Antara fungsionalitas inti, pencatatan, dan penanganan pengecualian, lingkungan membutuhkan 11 impor namespace yang berbeda untuk melakukan pekerjaan yang satu ini.

Sulit bagi saya untuk mengatakan pada diri sendiri 'meminimalkan impor'. Atau untuk menilai keberhasilan kelas saya hanya dengan menghitung jumlah ruang nama yang diimpor. Saya tidak dapat menggunakan ini secara terpisah, sebagai isolasi, sebagai indikasi keberhasilan suatu kelas. Bagi saya, 'impor' adalah sarana untuk mengakhiri kelas. Jika pekerjaan kelas didefinisikan dengan baik, semua hal lain dalam sistem pendukung, termasuk impor, akan mengurus dirinya sendiri.

paulstgeorge
sumber