Ketika datang ke Microservices, siklus hidup pengembangan layanan juga harus independen. *
SLDC dan tim pengembang berbeda
dalam sistem MS nyata, mungkin ada beberapa tim yang terlibat dalam pengembangan ekosistem, yang masing-masing bertanggung jawab atas satu atau lebih layanan. Pada gilirannya, tim-tim ini mungkin berlokasi di kantor, kota, negara, rencana yang berbeda ... Mungkin, mereka bahkan tidak saling mengenal, apa yang membuat berbagi pengetahuan atau kode sangat sulit (jika mungkin). Tetapi ini bisa sangat nyaman karena kode bersama juga menyiratkan semacam alasan berbagi dan sesuatu yang penting untuk diingat adalah bahwa, apa pun yang masuk akal untuk tim tertentu, tidak harus membuatnya untuk tim lain. Misalnya, mengingat Pelanggan DTO , bisa berbeda tergantung pada layanan yang dimainkan, karena pelanggan ditafsirkan (atau dilihat) berbeda dari setiap layanan.
Kebutuhan berbeda, teknologi berbeda
SLDC yang terisolasi juga memungkinkan tim untuk memilih tumpukan yang paling sesuai dengan kebutuhan mereka. Memaksakan DTO yang diterapkan dalam teknologi tertentu membatasi kapasitas tim untuk memilih.
DTO bukanlah aturan bisnis atau kontrak layanan
Apa DTO sebenarnya? Objek polos tanpa tujuan lain selain memindahkan data dari satu sisi ke sisi lain. Tas getter dan setter. Bukan jenis "pengetahuan" yang layak digunakan kembali, secara keseluruhan karena tidak ada pengetahuan sama sekali. Volatilitas mereka juga membuat mereka kandidat yang buruk untuk digabungkan.
Bertentangan dengan apa yang Dherik telah menyatakan, itu harus mungkin untuk layanan untuk mengubah DTOs tanpa harus membuat layanan lain untuk perubahan pada waktu yang sama. Layanan harus menjadi pembaca yang toleran, penulis yang toleran, dan toleran yang gagal . Jika tidak, mereka menyebabkan sambungan sedemikian rupa sehingga membuat arsitektur layanan menjadi tidak masuk akal. Sekali lagi, dan bertentangan dengan jawaban Dherik, jika tiga layanan membutuhkan DTO yang persis sama, kemungkinan ada yang salah selama dekomposisi layanan.
Bisnis yang berbeda, interpretasi yang berbeda
Meskipun mungkin ada (dan akan ada) konsep lintas sektor di antara layanan, itu tidak berarti kita harus memaksakan model kanonik untuk memaksa semua layanan menafsirkannya dengan cara yang sama.
Studi kasus
Katakanlah perusahaan kami memiliki tiga departemen, Layanan Pelanggan , Penjualan dan Pengiriman . Katakanlah setiap rilis ini satu atau lebih layanan.
Layanan Pelanggan, karena bahasa domainnya , mengimplementasikan layanan di sekitar konsep pelanggan, di mana pelanggan adalah orang . Misalnya, pelanggan dimodelkan sebagai nama , nama belakang , usia , jenis kelamin , email , telepon , dll.
Sekarang katakanlah, Penjualan dan Pengiriman memodelkan layanan mereka sesuai dengan bahasa domain masing-masing juga. Dalam bahasa-bahasa ini, pelanggan konsep juga muncul tetapi dengan perbedaan yang halus. Bagi mereka, pelanggan bukanlah (harus) orang . Untuk Penjualan , pelanggan adalah nomor Dokumen sebuah Kartu Kredit dan alamat penagihan , untuk Pengiriman sebuah nama lengkap dan alamat pengiriman juga.
Jika kami memaksa Penjualan dan Pengiriman untuk mengadopsi model data kanonik dari Layanan Pelanggan , kami memaksa mereka untuk berurusan dengan data yang tidak perlu yang akhirnya dapat memperkenalkan kompleksitas yang tidak perlu jika mereka harus mempertahankan seluruh representasi dan menjaga data pelanggan tetap sinkron dengan layanan pelanggan. .
Tautan yang berhubungan
* Di sinilah letak kekuatan arsitektur ini
proto
file untuk gRPC atauavro
skema untuk Kafka dan menghasilkan DTO di kedua layanan, tetapi saya tidak akan berbagi perpustakaan bersama antara dua proyek.