Saya suka menjaga kode saya dapat diuji dan telah memutuskan untuk pergi dengan strategi Dependency-Injection untuk kerangka kerja MVC saya saat ini, yang pasti telah terbukti menjadi cara yang bagus untuk memastikan kode yang digabungkan secara longgar, testability dan modularitas.
Tetapi sebagai jauh dari master di pola Desain, saya memiliki waktu yang sulit mencari cara yang baik untuk menjaga Model saya sebagai longgar digabungkan dari kelas konektor Database, mungkin.
Bagaimana ini bisa dilakukan?
Karena saya belum memberikan kode fisik apa pun bersama dengan pertanyaan ini, saya akan sangat menghargai beberapa contoh logika / kode atau info yang dapat mengarahkan saya ke arah untuk memahami masalah yang dijelaskan di atas.
object-oriented
php
dependency-injection
Industri
sumber
sumber
Jawaban:
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:
sumber
Anda ingin memiliki dua hal.
"Model Domain" Anda alias Entitas Data, ini mewakili entitas sistem Anda seperti pengguna, posting, produk, dll.
Kode Penggunaan
Di sana Anda memilikinya, itulah cara Anda membuat model domain (Entitas) dan memiliki model MVC melakukan konektivitas DB dan manipulasi data.
Jika Anda bertanya-tanya apa itu PPI, cari "Kerangka Kerja PPI".
Semoga berhasil dengan pencarian Anda.
Salam, Paul Dragoonis.
sumber
Ingat, MVC muncul di smalltalk, yang memiliki kegigihan otomatis untuk semua objek. Jadi pola MVC tidak menentukan solusi untuk pemisahan model / kegigihan.
Preferensi saya adalah menyediakan objek "Repositori" yang tahu cara membuat objek Model dari database dan menyimpan objek Model ke database. Kemudian Model tidak tahu apa-apa tentang kegigihan. Namun beberapa tindakan pengguna harus memicu penyimpanan, jadi sepertinya Pengendali akan tahu tentang Repositori. Saya biasanya menggunakan beberapa bentuk Dependency Injection untuk menjaga Controller dari digabungkan ke Repositori.
sumber