Kami memiliki 20 - 30 modul / solusi independen. Masing-masing memiliki sekitar 7 - 10 proyek dengan kelas yang berbeda, komponen, dll. Ini semua digunakan secara internal untuk perusahaan kami.
Masalah kita adalah ketika kita membuat perubahan dalam satu modul, kita kemudian perlu memastikan untuk memperbarui semua modul lain yang mengakses kode ini. Ini sulit diketahui karena berada dalam basis kode yang berbeda.
Bagaimana kita bisa mendokumentasikan di mana semua penggunaan eksternal API? Atau sebaliknya mencegah perubahan kecil dari melanggar modul lain?
Jawaban:
Solusi paling sederhana, IMO, adalah memiliki sejumlah tes otomatis yang layak untuk setiap produk. Saat Anda memperbarui perpustakaan, Anda menjalankan ruang uji untuk setiap produk. Jika tes gagal, maka Anda akan tahu produk mana yang perlu diperbarui.
sumber
Saya akan menyarankan untuk tidak mencoba mendokumentasikan ini (setidaknya secara manual) karena jika Anda meminta orang untuk memperbaruinya, itu akan membutuhkan tingkat akurasi yang tinggi untuk bekerja dengan benar. Tetapi Anda tidak akan pernah mendapatkan tingkat akurasi seperti itu karena menambahkan dokumentasi semacam ini akan ... tidak menyenangkan dan tidak ada yang akan melakukannya.
Beberapa opsi yang lebih baik:
Anda juga mungkin mempertimbangkan untuk secara perlahan refactoring API tidak terlalu rapuh, tapi saya berharap itu di luar ruang lingkup apa yang dapat Anda capai secara wajar jika Anda seorang individu dan memiliki 20+ modul skala besar untuk bekerja dengannya.
sumber
Pertama-tama, API dengan penggunaan eksternal tidak boleh berubah.
Seperti @BryanOakley sebutkan, menggunakan unit-test otomatis sangat penting dan menyelamatkan jiwa dalam situasi seperti itu. Di luar itu, beberapa saran yang mungkin (atau mungkin tidak, sesuai situasi) membantu Anda
Banyak bahasa (seperti Java dan C #) menawarkan
Function/Method Overriding
. Bahasa seperti Python menawarkan Anda untuk memberikan (jumlah tak terbatas) argumen dan argumen kata kunci ke suatu fungsi:Jawa:
Python
Banyak bahasa menawarkan
public
,private
danprotected
metode. Anda dapat menangani panggilan fungsi dalam suatupublic
fungsi dan melakukan pekerjaan dalamprivate/protected
fungsi.Dalam python, tidak ada definisi publik / pribadi untuk metode dan fungsi, tetapi garis bawah terkemuka (
_
) mengatakan bahwa suatu metode bersifat pribadi dan tidak boleh digunakan secara eksternal. Panggilan API eksternal diserahkan oleh metode yang terbuka untuk dunia luar dan semua tugas dilakukan dalam fungsi lokal :Seperti yang saya katakan, definisi API yang (juga) digunakan oleh aplikasi eksternal tidak boleh terlalu banyak berubah. Anda dapat mencari cara untuk membuat fungsi luar Anda lebih fleksibel sehingga Anda dapat mengubah cara kerja API tanpa melanggar keadaan saat ini.
sumber
Saya akan menyarankan bahwa ini tidak mungkin diketahui.
Anda bertanggung jawab atas Komponen dan Antarmuka mereka.
Anda tidak bertanggung jawab atas apa pun dan segala sesuatu yang mungkin memanfaatkannya.
Jawaban singkat? Tes.
Tulis Tes yang menggunakan Antarmuka yang diterbitkan. Jalankan kembali setiap kali Anda melakukan perubahan. Selama tes "Lulus", Anda belum merusak apa pun. Ketika tes rusak (dan itu akan) baik (a) menemukan dan memperbaiki masalah atau (b) jika Anda dapat membenarkan perubahan sebagai sah, maka tulis ulang tes untuk mengakomodasi itu.
sumber
Saya telah melihat dan memberi kode API dengan nomor versi di jalur fungsi dan / atau nama.
Dengan cara ini Anda dapat memiliki versi API yang berbeda tersedia - lengkap API dan versi fungsi yang berbeda dalam API.
Ini menempatkan pekerjaan menjaga semua versi API dalam kode untuk API - tidak ada kode aplikasi lain yang perlu diubah selain dari yang di mana fasilitas API baru diproduksi.
Saya pikir ini sangat penting saat menulis API yang akan digunakan oleh aplikasi di luar organisasi Anda.
Sebagai contoh, berikut adalah contoh kode untuk mengirim SMS menggunakan api bulksms:
http://developer.bulksms.com/eapi/code-samples/csharp/send_sms/
dari sana ada garis:
di mana 2 dan 2.0 adalah nomor versi API.
Karena API ini dimaksudkan untuk digunakan oleh banyak pelanggan SMS Massal, perubahan pada API ini akan berpotensi menghancurkan banyak aplikasi dan membuat telepon dukungan berdering.
sumber