Bagaimana cara berbagi basis kode di antara 10+ proyek dan meminimalkan rasa sakit?

8

Saya memiliki sejumlah aplikasi yang berbagi data yang sama di database yang sama. Untuk mencoba dan meminimalkan redundansi kode, Layer Akses Data adalah proyek bersama. Ini mencegah setiap proyek dari perlu kode ulang akses data itu sendiri, tetapi ini juga menciptakan titik sakit yang besar. Ketika satu tim perlu memperbarui lapisan data, semua tim lain harus menarik dan menguji perubahan untuk memastikan bahwa mereka tidak merusak apa pun dan ini adalah proses yang lambat dan menyakitkan.

Saya telah memikirkan ide untuk menghapus lapisan data bersama dan hanya meminta masing-masing tim mengelola lapisan data mereka sendiri tetapi masalahnya adalah semua tim masih mengakses database yang sama sehingga jika ada perubahan tabel titik nyeri masih ada karena setiap tim perlu perbarui kode yang relevan.

Jadi pertanyaan saya adalah, bagaimana saya bisa mendesain data dan lapisan akses kami sedemikian rupa sehingga banyak proyek diusir dari sumber data yang sama, dan meminimalkan rasa sakit karena membuat perubahan pada database atau lapisan akses?

tt9
sumber
Sudahkah Anda mencoba versi? Ketika Tim # 1 memperbarui kode, mereka menambah nomor versi dari X ke X + 1. Tim # 2 masih dapat menggunakan versi X tanpa khawatir. Mereka dapat memutakhirkan ke X + 1 sesuka mereka.
user2023861

Jawaban:

5

Lapisan data bersama terlihat ide yang cukup bagus. Solusi untuk meminimalkan rasa sakit adalah:

  1. buat modul tes yang melempar pengecualian (seperti: semuanya berhenti berfungsi bukan hanya pesan) ketika beberapa tes gagal.
  2. Masukkan SEMUA modul uji ke dalam folder bersama. Maksud saya modul uji semua 10+ proyek harus dalam folder yang sama (Atau jalur yang mudah dipahami).
  3. Jika seorang programmer ingin mengedit lapisan kritis dia harus menjalankan semua tes di folder itu, jika ada sesuatu yang tidak berfungsi, dia tidak dapat melakukan kode.

Dengan cara ini jika saya membuat sepotong kode saya termotivasi untuk menulis kelas tes yang baik, seperti kelas tes nyata karena jika kelas tes saya meledak dengan beberapa modifikasi berarti modifikasi tersebut akan merusak kode saya. Jadi setiap programmer dipaksa untuk menulis tes yang baik (jika saya tidak kode saya bisa pecah dari waktu ke waktu). Menjalankan tes semua proyek tanpa kesalahan berarti: "ok Anda bisa melakukan", ketika ada masalah itu berarti "tidak, modifikasi itu akan merusak sistem pada beberapa baris x"

Ini adalah poin yang bagus karena hal-hal tes terlalu sering tertinggal dalam suatu proyek ... tentu saja mempertahankan kode tes memerlukan beberapa upaya tambahan.

JoulinRouge
sumber
4

Saya telah mengalami masalah ini secara langsung. Sulit, dan saya hanya mengintegrasikan lima aplikasi. Saya dapat menawarkan beberapa tips:

  1. Pisahkan database dengan menggunakan layanan RESTful untuk sebanyak mungkin hal. Ini memungkinkan Anda untuk dengan mudah membuat beberapa versi antarmuka jika diperlukan, dan itu membuat migrasi basis data jauh lebih mudah.
  2. Jika akses database untuk beberapa aplikasi hanya baca-baca, buat tampilan database dari data yang dibutuhkan. Jika Anda harus melakukan proses batch untuk menghitung nilai, lakukan dalam tampilan terwujud.
  3. Pikirkan baik-baik tentang desain. Perubahan basis data apa pun kemungkinan besar akan merusak aplikasi lain. Apakah semua aplikasi benar-benar membutuhkan akses database penuh? Jika tidak, hentikan mereka untuk menggunakan layanan. Memisahkan semua akses basis data dari logika apa pun.
Doug
sumber
2
Iya. Memisahkan aplikasi dari data yang mereka akses. Tidak ada masalah di CS yang tidak dapat diselesaikan dengan menambahkan lapisan pengalihan (abstraksi).
RubberDuck
2

Jawaban singkatnya adalah bahwa Anda perlu BANYAK waktu ke dalam kode bersama Anda untuk membuatnya sekuat / sekuat / seandal mungkin.

Seperti yang Anda temukan, Anda tidak bisa sering mengubah kode perpustakaan.

Mungkin perlu untuk membagi lapisan data Anda menjadi dua bagian - bagian tingkat rendah yang melakukan hal-hal yang sangat sederhana tetapi tidak pernah berubah (yaitu, kode bersama) dan bagian tingkat tinggi yang mungkin harus unik untuk setiap aplikasi.

Untuk porsi bersama level rendah, Anda harus berpikir seperti pengembang perpustakaan & bukan pengembang aplikasi. Ini berarti banyak tes unit, antarmuka aplikasi yang sangat jelas dan teliti, dokumentasi yang benar, lengkap dan bermanfaat, dan banyak kode pertahanan - semua input tidak valid hingga terbukti sebaliknya.

Kode yang dibagikan harus ditulis untuk melayani kebutuhan aplikasi yang Anda miliki hari ini yang akan menggunakan kode tersebut, tetapi Anda harus meluangkan waktu ekstra untuk mempertimbangkan bagaimana kode ini akan bekerja untuk selusin aplikasi berikutnya yang belum belum diusulkan. Dengan kata lain, kode bersama memecahkan masalah umum dalam mengekspos data dengan cara yang bermakna bagi konsumennya. Jika dilakukan dengan baik, konsumen baru dapat menggunakan perpustakaan ini tanpa perubahan.

Dan Pichelman
sumber
Jadi dengan asumsi kami memiliki lapisan akses bersama yang sangat kuat, apa yang akan menjadi beberapa strategi untuk mengurangi rasa sakit dari perubahan ketika itu terjadi? Atau itu hanya peluru yang harus kita gigit?
tt9
1
@ user2313300 Ikuti prinsip Terbuka / tertutup. Ini akan mengurangi masalah saat memperluas perpustakaan. Menghapus kemampuan atau memodifikasi antarmuka harus dihindari.
BillThor