Salah satu caranya adalah mendesain model Anda sebelum mendesain basis data Anda. Saat mendesain model Anda, fokusnya adalah menangkap logika bisnis dan makna dalam domain masalah. Ini harus ditangkap dengan cara yang masuk akal bagi bisnis, termasuk lebih dari sekadar entitas dan bidang data. Beberapa elemen data diinterpretasikan dari yang lain, beberapa bergantung pada yang lain, dll. Selain itu Anda akan menambahkan ke model ini setiap logika dasar yang Anda butuhkan, seperti bagaimana objek merespons secara internal ketika elemen tertentu diatur ke nilai tertentu.
Sangat mungkin bahwa Anda akan berakhir dengan sesuatu yang 90 +% identik dengan bagaimana Anda akhirnya mempertahankan data. Tidak apa-apa. Itu bisa sepenuhnya identik tanpa digabungkan.
Perhatikan juga bahwa memodelkan domain dalam kabut ketidaktahuan kegigihan sejati adalah sedikit grail suci untuk desain perangkat lunak. Jika Anda bisa melakukannya, fantastis. Tetapi jika domain masalah sama sekali signifikan dan memiliki kerumitan untuk itu maka itu masih merupakan ide yang baik untuk mundur dari pemodelan domain dari waktu ke waktu untuk melakukan pemeriksaan kewarasan pada ketekunan data untuk memastikan Anda belum melukis diri Anda ke sudut.
Ingat peran sebenarnya dari berbagai komponen dan pisahkan peran tersebut saat Anda mendesainnya. Untuk setiap keputusan desain yang diberikan, tanyakan pada diri Anda apakah ada peran yang dilanggar:
- Database - Menyimpan data, menjaga integritas data, menjaga data tetap diam.
- Model - Berisi logika bisnis, modelkan domain masalah, pertahankan data dalam gerakan, respons terhadap peristiwa di tingkat bisnis, dll.
- Tampilan - Sajikan data kepada pengguna, lakukan logika sisi pengguna (validasi dasar sebelum validasi sejati dilakukan dalam model, dll.).
- Pengendali - Menanggapi peristiwa pengguna, memberikan kontrol pada model, permintaan rute, dan mengembalikan respons.