Selama bertahun-tahun menggunakan C # /. NET untuk banyak proyek internal, kami memiliki satu perpustakaan yang tumbuh secara organik menjadi satu kumpulan besar barang. Itu disebut "Util", dan saya yakin banyak dari Anda telah melihat salah satu dari binatang buas ini dalam karier Anda.
Banyak bagian dari perpustakaan ini sangat mandiri, dan dapat dipecah menjadi proyek-proyek terpisah (yang kami ingin open-source). Tetapi ada satu masalah besar yang perlu dipecahkan sebelum ini dapat dirilis sebagai perpustakaan terpisah. Pada dasarnya, ada banyak dan banyak kasus dari apa yang saya sebut "dependensi opsional" antara perpustakaan ini.
Untuk menjelaskan hal ini dengan lebih baik, pertimbangkan beberapa modul yang merupakan kandidat yang baik untuk menjadi perpustakaan yang berdiri sendiri. CommandLineParser
adalah untuk parsing baris perintah. XmlClassify
adalah untuk serialisasi kelas ke XML. PostBuildCheck
melakukan pemeriksaan pada rakitan yang dikompilasi dan melaporkan kesalahan kompilasi jika gagal. ConsoleColoredString
adalah perpustakaan untuk literal string berwarna. Lingo
adalah untuk menerjemahkan antarmuka pengguna.
Masing-masing perpustakaan dapat digunakan sepenuhnya berdiri sendiri, tetapi jika mereka digunakan bersama-sama maka ada fitur tambahan yang berguna yang bisa didapat. Misalnya, baik CommandLineParser
dan XmlClassify
mengekspos fungsionalitas pemeriksaan pasca-pembangunan, yang mengharuskan PostBuildCheck
. Demikian pula, CommandLineParser
memungkinkan opsi dokumentasi disediakan menggunakan string string berwarna, yang membutuhkan ConsoleColoredString
, dan mendukung dokumentasi yang dapat diterjemahkan melalui Lingo
.
Jadi perbedaan utamanya adalah ini adalah fitur opsional . Seseorang dapat menggunakan parser baris perintah dengan string polos, tidak berwarna, tanpa menerjemahkan dokumentasi atau melakukan pemeriksaan post-build. Atau seseorang dapat membuat dokumentasi itu dapat diterjemahkan tetapi masih belum berwarna. Atau keduanya berwarna dan dapat diterjemahkan. Dll
Melihat melalui pustaka "Util" ini, saya melihat bahwa hampir semua pustaka yang berpotensi dipisah memiliki fitur opsional yang mengikatnya dengan pustaka lain. Jika saya benar-benar membutuhkan pustaka tersebut sebagai dependensi, maka kumpulan hal ini tidak benar-benar tidak kusut sama sekali: Anda pada dasarnya masih memerlukan semua pustaka jika Anda ingin menggunakan satu saja.
Apakah ada pendekatan yang ditetapkan untuk mengelola dependensi opsional seperti itu di .NET?