Seseorang menjelaskan kepada saya bahwa karena dalam pengembangan tangkas, kebijakan dan logika aplikasi harus lebih penting daripada rincian seperti metode kegigihan, keputusan kegigihan harus diambil pada akhirnya. Jadi mungkin ide yang baik untuk memulai dengan ketekunan yang lebih sederhana seperti file datar, sampai kita mencapai titik kelemahan dari metode ini menjadi jelas, dan hanya kemudian kita mengubah ketekunan, misalnya dengan menggunakan database relasional.
Apakah ini benar, atau apakah saya salah memahami konsep tersebut? Apakah ini cara tim tangkas biasanya membangun aplikasi? Apa alasannya dan kapan saya sebaiknya tidak mengambil pendekatan ini?
architecture
agile
database
persistence
Louis Rhys
sumber
sumber
Jawaban:
Konsep yang disampaikan adalah sesuatu yang pasti bagian dari gesit dan relevan, ide mendorong hal-hal ke saat terakhir yang bertanggung jawab.
Namun contoh yang diambil sebenarnya bergantung pada asumsi yang sepenuhnya salah untuk memulai dengan:
bahwa lebih mudah / kurang bekerja untuk mengimplementasikan database file datar daripada menggunakan RDBMS. - Seringkali benar-benar salah
Contohnya harus: Lapisan ketekunan dijaga agar implementasi sesederhana mungkin sampai keputusan dibuat bahwa itu tidak memadai.
Bagi banyak tim pengembang, mendapatkan basis data untuk melakukan ini adalah masalah satu atau dua jam (atau 15 menit untuk database kecil dengan ORM), sedangkan database file datar yang tidak perlu mereka campur tangan mungkin merupakan rasa sakit dan gangguan yang luar biasa karena mereka harus menulis semua kode tipe konstruksi pencarian dan data tabel secara manual, ketika database mungkin semudah membuat tabel di UI, menambahkan beberapa kolom, dan kemudian memiliki ORM menghasilkan segalanya lain yang kamu butuhkan.
Selain itu, jika Anda tidak tahu lapisan kegigihan Anda untuk memulainya, itu adalah tindakan yang lebih tepat untuk memulai dengan RDBMS umum yang diketahui oleh tim Anda, karena membuat perubahan di kemudian hari dari flat-file ke RDBMS jauh lebih besar daripada nanti berubah dari satu RDBMS ke yang lain. Ada banyak alat untuk mengkonversi dari sebagian besar RDBMS umum ke yang lain, dan tips dan semacamnya karena itu adalah jalur yang sering dilalui. Ada sangat sedikit alat untuk mengonversi dari flat-file ke RDBMS yang diberikan di mana flat-file Anda memiliki beberapa format eksklusif yang sebelumnya tidak ditulis tooling selain dari perpustakaan Anda sendiri.
Singkatnya: Konsepnya benar dan akurat, tetapi contohnya didasarkan pada asumsi yang sangat besar dan sering (hampir selalu) tidak akurat .
sumber
Karena Anda tahu Anda akan menggunakan DB, tidak ada gunanya menulis kode untuk menangani file datar. Anda mungkin melewati beberapa iterasi menggunakan beberapa CSV read-only tetapi Anda akan segera menemukan diri Anda menulis kode yang Anda tahu akan Anda buang.
Satu hal yang dapat Anda lakukan untuk menyederhanakan kerumitan awal dengan menggunakan sesuatu seperti SQLite (perpustakaan yang memberi Anda database SQL tanpa server yang disimpan dalam file). Itu punya sistem tipe yang fleksibel sehingga Anda tidak harus serius berkomitmen untuk skema, tidak ada server untuk mengkonfigurasi / menyambung ke & membangun kembali DB Anda semudah menghapus file. Ini juga memungkinkan Anda untuk cukup memasukkan gambar DB bersama dengan kode dalam kontrol versi jika diperlukan.
sumber
Ini adalah contoh, yang digunakan untuk menunjukkan konsep, bukan konsep dalam dan dari dirinya sendiri.
Konsepnya adalah bahwa Anda tidak membuat keputusan arsitektur sampai saat yang bertanggung jawab terakhir , tetapi tidak lebih lambat. Namun, pada kenyataannya, Anda sering memiliki keputusan tentang database yang akan Anda gunakan sejak dini. Itu mungkin tidak sempurna, tapi itu fakta.
Setelah keputusan itu dibuat, Anda tidak secara aktif menghindarinya. Menyimpan sesuatu dalam database yang sudah ada seringkali semudah menyimpannya dalam file datar.
Tetapi mengubah dari MySql di Linux ke SQL Server pada Windows mungkin tidak sesederhana mengubah dari flat file di mana saja ke SQL Server pada Windows. Itulah intinya. Jadi, sementara ada keraguan tentang solusi akhir, ambil opsi sesederhana mungkin, akuntansi untuk perubahan. Setelah keputusan dibuat, patuhi itu.
sumber
Apa yang kamu bertahan?
Saya berada di tim yang gesit dan untuk satu aplikasi, kami bertahan hampir semuanya ke database. Pikiran Anda, jika kami tidak maka tidak akan ada banyak untuk aplikasi ini untuk melakukan - hal-hal yang tetap ke database adalah bagian besar dari raison d'etre nya .
Jadi: Apa yang Anda lakukan dan apa yang aplikasi Anda lakukan? Jika aplikasi tidak benar-benar peduli di mana datanya bertahan, maka Anda dapat menulis lapisan kecil yang membuat keputusan (keputusan itu dapat disimpan dalam file konfigurasi di suatu tempat) dari flat-file vs database. Saya pikir Anda perlu mengevaluasi aplikasi Anda dan data Anda dan memutuskan apakah itu masuk akal dalam kasus tertentu Anda menginvestasikan waktu dalam ketekunan database, atau hanya membaca / menulis file datar (yang akan mungkin lebih cepat dalam hal waktu pengembangan).
sumber
Banyak orang salah mengartikan bahwa aspek gesit sebagai makna mereka tidak harus merencanakan ke depan untuk fitur masa depan. Tidak ada yang bisa lebih jauh dari kebenaran. Yang tidak Anda lakukan adalah mengizinkan perencanaan fitur-fitur masa depan untuk menunda pengiriman nilai kepada pelanggan Anda sekarang.
Bagaimana itu berlaku untuk sesuatu seperti kegigihan sangat tergantung pada aplikasi Anda. Salah satu proyek hobi saya saat ini adalah kalkulator. Akhirnya, saya ingin dapat menyimpan konstanta dan fungsi yang ditentukan pengguna, dan menyimpan status ketika saya menutup program. Itu membutuhkan kegigihan, tetapi saya bahkan belum mulai berpikir tentang bentuk apa yang akan diambil. Program saya akan sangat berguna tanpa ketekunan, dan menambahkannya sekarang akan menambah penundaan yang signifikan untuk rilis pertama saya. Saya lebih suka memiliki kalkulator yang berfungsi dengan fitur lebih sedikit daripada tidak sama sekali sementara saya menunggu itu menjadi sempurna.
Proyek hobi saya yang lain adalah untuk koreksi warna video dan foto. Aplikasi ini akan benar-benar tidak dapat digunakan tanpa dapat menyimpan pekerjaan saya dalam proses, dan kode yang diperlukan untuk melakukannya meresap di seluruh program. Jika saya tidak melakukannya dengan benar sejak awal, maka mengubahnya bisa sangat sulit, jadi saya telah menghabiskan sedikit usaha untuk kegigihan di depan.
Sebagian besar proyek akan jatuh di antara keduanya, tetapi Anda seharusnya tidak pernah merasa buruk tentang perencanaan untuk fitur masa depan jika itu menambah sedikit atau tidak ada upaya ekstra sekarang. Basis data mungkin rumit, tetapi sebagian besar dari kerumitan itu tersembunyi di balik antarmuka yang solid dan teruji dengan baik. Pekerjaan yang harus Anda lakukan dalam aplikasi Anda mungkin lebih sedikit untuk database daripada file flat, karena semua fitur yang diberikan database secara gratis. Ada opsi "hybrid" seperti SQLite jika Anda tidak ingin berurusan dengan kerumitan server database.
sumber
Saya pikir Anda berfokus pada nilai-nilai yang salah. Dalam kelincahan, nilai bisnis menjadi fokus. Anda membuat produk untuk memberikan nilai bisnis kepada beberapa pengguna akhir.
Jika Anda membuat lapisan ketekunan terlambat, atau membuatnya sepanjang jalan adalah strategi Anda untuk memberikan nilai bisnis kepada pelanggan. Saya tidak percaya bahwa istilah "gesit" itu sendiri menentukan jika Anda harus melakukan yang satu atau yang lain.
Sudut pandang tentang menunda strategi penyimpanan data dianjurkan dalam presentasi ini oleh Robert C. Martin (salah satu penulis manifesto tangkas).
Ini adalah presentasi yang sangat bagus, saya dapat merekomendasikan Anda untuk menontonnya.
Tapi saya tidak setuju dengan itu! Setidaknya sampai tingkat tertentu.
Saya tidak percaya bahwa Anda dapat menyebut cerita pengguna dengan "Selesai", jika cerita pengguna melibatkan data yang harus dipertahankan, dan Anda tidak benar-benar menerapkan segala jenis kegigihan.
Jika pemilik produk memutuskan bahwa sekarang saatnya untuk ditayangkan, Anda tidak dapat melakukannya. Dan jika Anda belum mulai menerapkan kegigihan hingga akhir proyek, Anda juga tidak memiliki informasi tentang berapa lama waktu yang diperlukan untuk menerapkan lapisan kegigihan, menjadikannya risiko proyek yang besar.
Proyek tangkas yang telah saya kerjakan belum menunda strategi akses data. Tetapi telah dipisahkan, memungkinkan kita untuk mengubahnya di sepanjang jalan. Dan seluruh skema basis data tidak dirancang di muka. Tabel dan kolom dibuat sepanjang seperti yang diperlukan untuk mengimplementasikan pengguna yang disimpan itu, pada akhirnya, memberikan nilai bisnis.
sumber
Dibutuhkan pertimbangan dan pengalaman yang baik untuk melihat pertanyaan apa yang perlu dijawab terlebih dahulu saat memulai proyek baru.
Jika produk akhir masih belum diketahui maka membangun / membuat prototipe dengan cepat akan membantu Anda mengetahui hal itu, dan ya iterasi dengan cara yang gesit akan membantu. Hal itu tentu saja akan menimbulkan risiko seperti mencari tahu di akhir proses bahwa implementasi kegigihan akan memakan waktu lebih lama dari yang Anda komunikasikan kepada para pemangku kepentingan Anda.
Jika produk akhir sudah diketahui dengan baik maka memahami bagaimana kegigihan akan bekerja dalam aplikasi Anda bisa lebih penting untuk diketahui sejak awal. Risiko ada yang menemukan masalah dengan spesifikasi produk Anda nanti dalam proses pengembangan.
sumber
File flat tidak sederhana!
Mereka memungkinkan penyimpanan dan itu saja. Struktur data, jalur akses, dll. Semuanya terserah Anda, dan, ada banyak cara untuk melakukan kesalahan ini.
Ada alasan database ada dan salah satunya adalah untuk membuat hal-hal lebih sederhana bagi pengembang.
Sebagian besar pengembangan saya dilakukan untuk sistem besar dalam perusahaan besar. Kami selalu memiliki model data yang lengkap dan dipikirkan dengan matang sebelum kami melanjutkan dengan desain atau pengembangan lebih lanjut. Model data membantu Anda memahami masalah Anda dan memungkinkan penerapan yang bersih.
Item data yang terlupakan, struktur data yang tidak cocok, dan mimpi buruk lainnya dapat dihindari dengan membuat model data di muka.
Anda dapat meninggalkan pilihan teknologi database yang sebenarnya hingga setelah model data. Tetapi sebagian besar teknologi "ketekunan" adalah pemrograman yang terikat erat dan bahkan gaya desain. Jika Anda membuat kode untuk basis data relasional, dan kemudian memutuskan untuk beralih ke nilai kunci yang berawan, Anda harus menulis ulang sepenuhnya setengah kode Anda.
Jika Anda mulai dengan file datar dan beralih ke DB relasional, Anda mungkin akan membuang separuh kode Anda karena pengembang Anda akan membuang-buang waktu menerapkan database yang buruk.
sumber
Haruskah Anda mencoba kegigihan dalam file datar sebelum database?
Ya, Anda harus mencobanya. Apalagi jika Anda belum pernah mencobanya sebelumnya. Tidak peduli bagaimana hasilnya, Anda akan belajar sesuatu.
sumber