Tidak ada orang lain yang menyebutkan pedang bermata dua, jadi saya akan menambahkan 2 sen saya. Jika Anda memiliki banyak proyek dan semuanya berbagi beberapa kode yang dapat digunakan kembali, sesuai dengan praktik / prinsip pemrograman yang baik (misalnya KERING), Anda harus menempatkan kode di satu tempat global dan menyusunnya sedemikian rupa sehingga dapat dibagikan oleh semua proyek Anda tanpa modifikasi apa pun. Dengan kata lain, tetapkan antarmuka menjadi generik dan cukup umum untuk semua orang.
Ada beberapa opsi untuk melakukan ini: 1) Buat proyek dasar yang bergantung pada orang lain. Proyek ini dapat membuat distribusi biner yang dikonsumsi oleh proyek lain. 2) Tarik model sumber terbuka di dalam organisasi Anda. Memiliki kode umum menjadi cabang kode sendiri dan memiliki proyek lain menarik kode dengan cara yang sama Anda akan mengambil kode sumber dari OSS online.
Sekarang di sinilah pedang datang ...
Menempatkan kode ke tempat umum yang bergantung pada proyek / orang lain bisa menjadi agak mahal. Katakanlah Anda memiliki sepotong kode dan 4 proyek lainnya bergantung padanya. Salah satu pelanggan Anda yang menggunakan proyek A menemukan bug dan Anda harus memperbaikinya. Anda buru-buru memperbaiki dan pelanggan itu senang. Tapi Anda baru saja memodifikasi beberapa kode yang bergantung pada 3 proyek lainnya. Apakah Anda menguji ulang semua itu untuk memastikan tidak ada kondisi tepi yang diperkenalkan?
Kode umum juga harus dibuat lebih hati-hati dan antarmuka modul harus dirancang jauh lebih baik karena kode itu harus mengakomodasi tidak hanya satu tetapi 4 klien dan masing-masing dari mereka mungkin hanya menggunakan kode ini dengan sedikit perbedaan.
Jika proyek Anda berada pada siklus rilis yang berbeda, Anda harus lebih berhati-hati dalam mengelola kode umum. Anda tidak bisa begitu saja membuat perubahan dalam kode umum karena proyek B membutuhkan fungsionalitas baru, jika Anda 3 hari lagi memotong gambar akhir untuk proyek C.
Saya tidak mengatakan perpustakaan umum bukanlah solusi yang tepat. Saya adalah pendukung kuat KERING dan saya telah membuat dan mendukung kode umum sebelumnya dan terus melakukannya. Hanya ingin menaruhnya di luar sana yang hanya membuat kode umum akan memiliki biaya sendiri.
Jika Anda adalah satu-satunya yang menggunakan kembali kode ini, ini tidak seburuk itu. Jika Anda memiliki tim insinyur dan mereka mulai menggunakan kode umum, pengeluaran semakin meningkat. Jika orang lain terlibat, perkirakan menempatkan kode ke perpustakaan umum untuk mengambil 3 kali lebih banyak waktu yang dibutuhkan untuk sampai ke titik di mana Anda berpikir itu "lengkap". Anda perlu a) membuat perpustakaan lebih kuat untuk melindungi terhadap semua jenis kondisi tepi dan penggunaan yang tidak valid, b) memberikan dokumentasi sehingga orang lain dapat menggunakan perpustakaan dan c) membantu orang lain men-debug ketika mereka menggunakan perpustakaan dengan cara yang Anda belum diantisipasi dan dokumentasi Anda tidak mencakup kasus penggunaan khusus mereka.
Beberapa saran yang bisa saya tawarkan:
- Memiliki kode umum yang tercakup oleh pengujian unit otomatis dapat membantu dan memberi Anda sedikit pemikiran bahwa ketika Anda melakukan perubahan, Anda tidak hanya merusak beberapa proyek lain.
- Saya hanya akan menempatkan fungsionalitas yang sangat stabil ke dalam kode umum. Jika Anda menulis kelas tahun lalu untuk melakukan manajemen timer dan Anda belum mengubahnya dalam 9 bulan dan sekarang Anda memiliki 3 proyek lain yang membutuhkan penghitung waktu, maka pastikan itu adalah kandidat yang baik. Tetapi jika Anda baru saja menulis sesuatu minggu lalu, well ... Anda tidak memiliki banyak pilihan (dan saya benci menyalin / menempel kode mungkin lebih dari orang berikutnya) tetapi saya akan berpikir dua kali untuk membuatnya menjadi umum.
- Jika sepotong kode sepele tetapi Anda telah menggunakannya di beberapa tempat, mungkin lebih baik menggigit peluru, biarkan KERING sendirian dan biarkan beberapa salinan hidup.
- Kadang-kadang membayar untuk tidak hanya meletakkan kode umum ke lokasi umum dan meminta semua orang untuk merujuknya. Melainkan memperlakukan kode umum sebagai versi yang dapat dirilis sendiri dengan versi, tanggal rilis dan semuanya. Dengan cara ini proyek C dapat mengatakan, "Saya menggunakan perpustakaan umum v1.3" dan jika proyek D membutuhkan fungsionalitas baru, Anda meninggalkan v1.3 sendirian, lepaskan v1.4 dan proyek C tidak terpengaruh. Perlu diingat, ini JAUH, JAUH lebih mahal untuk memperlakukan kode umum sebagai produknya sendiri daripada sekadar memeriksanya ke lokasi umum.