Saya memiliki situasi di mana saya mendukung perpustakaan yang secara fungsional sama dalam berbagai bahasa. Sering ada konstanta yang perlu dibagi di antara ini (misalnya, kunci nama bidang json atau kode kesalahan).
Cara saya saat ini melakukan ini adalah dengan memiliki kode yang mendefinisikan konstanta dalam setiap bahasa.
Masalahnya muncul dalam pemeliharaan. Jika saya menambahkan kode kesalahan baru, saya perlu memperbaruinya di setiap perpustakaan secara manual. Meskipun ini baik untuk beberapa, itu menjadi membosankan jika saya katakan 5 sdks untuk memperbarui. Akan menyenangkan memiliki satu sumber kebenaran untuk ini juga.
Saya telah memikirkan beberapa jenis file seperti config tetapi kemudian harus dimasukkan dalam setiap paket yang dikerahkan yang menambah kompleksitas pada proses build / release kami.
Apakah ada cara yang lebih baik untuk menangani pemeliharaan konstanta yang dibagi antara beberapa bahasa?
type
atribut untuk identifikasi struktur saat mentransfernya melalui kabel. Dengan ini, klien seluler hanya menentukan konstanta (jenis) yang mereka pahami pada saat itu dan mengabaikan jenis yang tidak dikenal. Definisi dinamis akan menyebabkan banyak masalah.Jawaban:
Meskipun saya pikir pendekatan Anda saat ini mungkin yang paling sederhana dan paling mudah, berikut adalah beberapa ide alternatif:
sumber
Pertanyaan bagus! Saya memiliki masalah yang persis sama; konstanta saya pada dasarnya: bahasa apa yang didukung dalam aplikasi saya, dan informasi tambahan tentang bahasa-bahasa tersebut karena berkaitan dengan fungsionalitas dalam aplikasi.
Sayangnya, hal terbaik yang saya temukan (seperti yang Anda miliki) adalah cukup mendefinisikan ulang konstanta untuk setiap bahasa, seperti yang Anda lakukan saat ini (saya tahu, Anda pasti ingin mendengarnya ).
Jelas itu terasa salah karena itu kebalikan dari KERING ( WET ?? ). Namun, konstanta harus berubah sangat jarang sehingga 5-10 menit mendefinisikannya kembali untuk setiap bahasa tidak terlalu mengganggu saya. Pada akhirnya, masalah kecil dengan beberapa solusi 'elegan' seperti konfigurasi bersama atau pembuatan kode dapat membutuhkan waktu berjam-jam atau beberapa hari untuk diselesaikan, jadi apa yang benar-benar didapat? Menambah kerumitan dengan risiko terjadi kesalahan yang perlu upaya tambahan untuk memperbaikinya bukanlah sesuatu yang ingin saya tangani.
Selain itu, jika aplikasi Anda memiliki begitu banyak konstanta yang mendefinisikan ulang mereka per bahasa ketika Anda menambah atau mengubahnya membutuhkan banyak waktu, Anda mungkin hanya memiliki bau kode yang lebih signifikan untuk ditangani dan, pada titik itu, Anda mungkin ingin mengubah untuk sesuatu yang lebih kompleks.
Jadi singkatnya, mendefinisikan kembali mereka untuk setiap bahasa adalah solusi terbaik saya, dan saya belum memikirkan sesuatu yang lebih KERING yang tidak memiliki faktor risiko lebih daripada yang ingin saya tangani.
Namun, satu hal yang pasti harus dilakukan adalah memastikan bahwa konstanta Anda didokumentasikan dengan baik dengan cara umum (dan bahasa agnostik) (kami memiliki repo dokumentasi perusahaan dengan spesifikasi, dokumen lain-lain, dokumen 'papan gambar', dll. Tempat kami menyimpannya dokumen ini). Pastikan juga Anda memiliki mekanisme untuk menjaga definisi mereka tetap sinkron. Itu tentang masalah besar dengan pendekatan duplikasi seperti yang Anda miliki, kecuali untuk sejumlah kecil tekanan psikologis dari duplikasi kode yang disengaja. Tetapi pada akhirnya, perubahan konstan Anda harus sangat disengaja dan jarang , sehingga masalah sinkronisitas pada dasarnya tidak ada.
Saya juga harus menyebutkan bahwa selama bertahun-tahun, saya telah melihat port multi-bahasa dari berbagai perpustakaan (terlalu lelah untuk mengingat apa itu saat ini) ditulis oleh kelompok yang sama yang selalu memiliki konstanta yang didefinisikan dalam bahasa itu sendiri. Tidak ada konfigurasi bersama, tidak ada pembuatan kode (kecuali untuk perpustakaan klien Google API ... tapi ayolah, Google memiliki sumber daya untuk membayar kompleksitas seperti itu). Jadi saya pikir kita telah menabrak dinding bata yang satu ini. Mungkin seseorang pada akhirnya akan datang dengan perpustakaan untuk mengatasi masalah ini;)
sumber
Mudah-mudahan, inti perpustakaan Anda ditulis dalam satu bahasa, dan perpustakaan lain menggunakan FFI ( https://en.wikipedia.org/wiki/Foreign_function_interface ) untuk menelepon ke perpustakaan inti. Ini akan memberi Anda lokasi pusat untuk menyediakan api untuk menerbitkan konstanta dan definisi dari. Dengan cara ini semuanya ada di dalam perpustakaan. Saya hanya menyebutkan ini karena sepertinya tidak dimasukkan dalam tanggapan Samuel.
Saya pikir itu benar-benar tergantung pada kemampuan basis pengguna Anda. Apakah cukup mampu untuk menangani melewati file konfigurasi lainnya? Apakah mereka dapat mengatur layanan baru? Untuk sebagian besar pengguna yang telah saya dukung, saya ingin semuanya serba lengkap - dengan cara ini para pengguna tidak perlu memikirkannya.
sumber
Hopefully, the core of you library is written in one language, and the other libraries use FFI
Sayangnya kami memiliki pustaka untuk klien web dan kode server (dalam berbagai bahasa) jadi ... itu tidak mudah untuk dilakukan (dan mungkin kerentanan keamanan jika kami dapat memulai di aplikasi web).