Dalam pengembangan tangkas, haruskah saya mencoba kegigihan dalam file datar sebelum database?

21

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?

Louis Rhys
sumber
1
Logika kegigihan bukan bagian dari detail kecil, atau kurang penting. Itu harus menjadi keputusan pertama. Anda ingin properti ACID untuk struktur kegigihan Anda. Keputusan itu tidak bisa terus tertunda.
Manoj R

Jawaban:

42

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 .

Jimmy Hoffa
sumber
6
Dan asumsi Anda yang sangat besar adalah mereka harus menulis secara manual semua kode tipe konstruksi seek-data secara manual! :-) Biasanya ketika Anda menggunakan flat file Anda mulai dengan menggunakan format serialisasi bawaan bahasa Anda (mis. Marshal di Ruby, atau NSKeyedArchiver di Cocoa / Objective-C) dan hanya membuang beberapa objek internal yang ada. Selama aplikasi Anda tidak perlu memuat ulang terlalu sering, dan selama Anda bisa menangani perubahan skema di seluruh versi aplikasi, teknik ini dapat bekerja dengan sangat baik untuk waktu yang lama, terutama selama pengembangan.
Alex Chaffee
@AlexChaffee titik adil, tetapi baik cara Anda perlu menulis beberapa kode di sekitar hal ini dengan satu cara atau yang lain dan ORM modern membuat melakukan hal-hal seperti itu dengan RDBMS atau NoSQL untuk masalah yang cukup setara dalam hal sepele, di mana perbedaan dampak pada tim adalah lebih banyak didasarkan pada skillet tim daripada apa pun, saya hanya berpikir itu adalah contoh yang buruk untuk menggambarkan poin yang sedang berusaha untuk alasan ini. Secara pribadi saya telah menggunakan MSSQL selama 13 tahun tetapi menempatkannya di tempat akan memutar MongoDB untuk kegigihan karena kesederhanaan untuk tidak membiarkannya mempengaruhi tujuan sebenarnya dari proyek sampai ACID penting.
Jimmy Hoffa
17

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.

Sean McSomething
sumber
4
Sepertinya Anda mendapat downvote dari Flat File Society.
JeffO
@ Jeffoff: SQLite menyimpan databasenya ke file datar.
Mr.Mindor
7
@ Mr.Mindor, kebanyakan database melakukan ... tapi itu tidak relevan. 'File Flat' di sini berarti memanipulasi file secara langsung, sebagai lawan melalui beberapa lapisan DB.
GrandmasterB
Tidak setuju. Saya masih perlu mempelajari cara kerja SQLite, dan mengimplementasikan kode yang memanipulasi database SQLite di .NET, mengonversi hasil kueri menjadi objek, dll. Sehingga tidak membuat pengembangan lebih mudah. Itu hanya menambah semua beban membuat database, tanpa keuntungan dari server database yang lengkap.
Louis Rhys
11

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.

pdr
sumber
Saya tidak setuju tentang jalur migrasi. technet.microsoft.com/en-us/library/cc966396.aspx memiliki petunjuk terperinci tentang migrasi dari MySQL ke MSSQL, meskipun untuk mengonversi flat-file ke salah satu pilihan akan memerlukan penulisan ETL secara manual dalam SSIS atau versi MySQL tentang itu.
Jimmy Hoffa
@ JimmyHoffa: Saya tidak tahu, CSV cukup mudah. blog.sqlauthority.com/2008/02/06/… tech-recipes.com/rx/2345/import_csv_file_directly_into_mysql tapi saya ambil poin Anda bahwa kedua jalur itu TIDAK rumit.
pdr
6

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).

FrustratedWithFormsDesigner
sumber
1
Aplikasi mengelola antrian permintaan, dan perlu mengingat antrian setelah menutup dan memulai kembali .. tidak ada kewajiban untuk menggunakan database seperti dalam aplikasi Anda
Louis Rhys
@LouisRhys: Apa yang akan dilakukan dengan data antrian ini? Cukup membaca dan menampilkan kepada pengguna? Apa manfaat yang menurut Anda akan Anda dapatkan dari bertahan dalam database?
FrustratedWithFormsDesigner
tindakan dalam antrian akan dieksekusi. manfaat dari basis data meliputi kinerja, manajemen konkurensi, dan mungkin klien juga akan memperhatikan keamanan, keterbacaan & permintaan data.
Louis Rhys
@LouisRhys: Mungkin untuk iterasi pertama atau dua pengembangan Anda bisa menggunakan flat file, hanya untuk mendapatkan bukti konsep bekerja, tetapi Anda mungkin ingin benar-benar memisahkan logika dari akses data, karena di masa depan itu kedengarannya seperti database mungkin merupakan hal yang baik (dan mengubah dari file ke db akan memakan waktu lebih lama kemudian). Pada akhirnya, ini adalah keputusan arsitektur lanjutan yang hanya dapat Anda buat karena Anda memiliki akses ke spesifikasi / persyaratan klien.
FrustratedWithFormsDesigner
5

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.

Karl Bielefeldt
sumber
1
"Rencana tidak berguna, tetapi perencanaan sangat penting." - Eisenhower
Alex Chaffee
3

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.

Pete
sumber
1

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.

Robert Watts
sumber
0

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.

James Anderson
sumber
-1

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.

Alex Chaffee
sumber