Saya sudah mencoba sekarang untuk waktu yang lama untuk membungkus kepala saya di sekitar OOP. Saya melihat kelebihannya. Saya sudah membaca banyak, banyak tutorial, dan menonton video dengan jumlah yang sama. Saya mendapatkan contoh hewan / kucing / anjing, saya mendapatkan contoh mobil / drive. Yang saya perjuangkan adalah bagaimana menerapkan konsep-konsep ini dalam aplikasi dunia nyata. Jadi, saya telah menetapkan untuk membangun satu menggunakan OOP.
Saya tidak meminta bantuan dengan sintaks atau menulis kode khusus - saya dapat menemukan diri saya dalam dokumentasi dan dengan mencari forum dll. Apa yang saya benar-benar butuhkan adalah beberapa panduan, dan dorongan ke arah yang benar setiap sekarang dan kemudian. Apakah ada programmer berpengalaman yang mau membimbing saya?
Sebagai proyek pembelajaran saya, saya ingin membuat "aplikasi web" sederhana. Sesuatu yang mirip dengan Craigslist tetapi cara dipermudah dalam hal ruang lingkup. Saya ingin menggunakan PHP5 dan MySQL, karena saya kenal dengan mereka.
Katakanlah hanya ada 2 kasus penggunaan ini:
- Posting sesuatu untuk dijual
- Menjelajah / mencari sesuatu untuk dibeli
"Benda" apa yang seharusnya menjadi objek? Saya bisa membayangkan bahwa setiap item bisa menjadi objek, tetapi pada titik apa? Dan mengapa?
Jadi misalnya, pengguna mengisi formulir "pos barang untuk dijual", haruskah formulir itu diubah menjadi objek yang diteruskan ke objek lain yang memasukkan nilai ke dalam basis data?
Bagaimana bila pengguna lain browsing dan permintaan untuk melihat semua item dari kategori C? Apakah masuk akal bahwa setiap kali aplikasi harus terhubung ke database-nya, ia menciptakan objek database dan kemudian mendapatkan banyak objek item dan menampilkannya di halaman? ... menulis ini keluar tentu membuat saya menyadari betapa mengerti aku masih tentang OOP. Tolong bantu saya memperbaikinya.
Jika menurut Anda ini bukan proyek yang baik untuk mulai mengarungi OOP, jangan ragu untuk menyarankan ide lain!
sumber
Jawaban:
Sejujurnya saya berpikir bahwa saran di sini sangat buruk bagi pelajar OO baru sejauh ini. Bukan ide yang baik untuk segera mulai memikirkan objek sebagai representasi dari contoh spesifik "sesuatu" yang didefinisikan oleh beberapa kelas. Lebih baik untuk menganggap mereka sebagai komponen terkotak dari mesin yang memiliki beberapa interaksi satu sama lain, tetapi tidak internal satu sama lain. Masing-masing komponen ini mempertahankan status
Jika Anda ingin menggunakan ORM (object-relational-mapping) untuk interaksi DB, kerangka apa pun yang Anda gunakan atau buat mungkin akan memiliki beberapa objek dangkal yang mewakili tabel, yang mungkin merupakan kumpulan dari "hal-hal," tapi saya tidak suka ORM secara pribadi , dan saya tidak berpikir mereka mewakili praktik OO yang ideal, tetapi mereka populer untuk aplikasi web besar.
Selain itu, Anda mungkin akan memiliki beberapa komponen penting yang harus dijalankan oleh mesin aplikasi web seperti satu atau lebih koneksi DB (Anda dapat membuat kelas yang mempertahankan koneksi dan Anda dapat menjalankan kueri yang disiapkan dari -
PDO
sangat bagus dengan sendirinya , tapi saya akan membungkusnya), dan mungkin sistem template untuk pandangan Anda. Anda mungkin ingin pengontrol Anda menjadi objek PHP juga. Jika Anda memiliki bentuk untuk mengisi, Anda mungkin memiliki objek yang mempertahankan nilai-nilai bentuk untuk P / R / G, token CSRF perlindungan, dan dapat melakukan validasi pada input.Anda seharusnya tidak mencoba mencari "benda" untuk berubah menjadi objek saat membuat desain aplikasi web dan grafik objek. Sebagai gantinya, Anda harus memikirkan komponen logis yang datang bersama-sama untuk membuatnya. Saya tidak berpikir Anda harus mencoba untuk memaksakan ini, dan itu harus datang secara alami, tetapi sangat sulit untuk dilakukan dengan benar dan Anda pasti akan harus mengubah beberapa keputusan desain di sepanjang jalan.
Saran terakhir saya adalah ini: komposisi atas warisan adalah cara untuk pergi.
sumber
Inilah cara Anda dapat menggunakan OOP untuk membeli dan menjual hewan peliharaan Anda, metodologi yang sama dapat digunakan untuk menjual mobil atau pesawat; p
sumber
Atas permintaan OP, saya akan membagikan kode buku tamu saya.
Kelas pesan:
Kelas Objek Akses Data Pesan:
index.php
Saya mengganti nama beberapa variabel dan fungsi agar masuk akal bagi Anda (diterjemahkan dari bahasa Belanda ke bahasa Inggris: P) sehingga Anda mungkin menemukan beberapa kalimat aneh kadang-kadang karena saya baru saja mengganti yang cepat dll. Selamat bersenang-senang dengannya. Juga ini bukan seluruh kode karena itu akan menghasilkan saya memposting seperti 20 file kode: P
sumber
Seperti yang disebutkan oleh Explosion Pills, dalam aplikasi yang kompleks sebagian besar objek berhubungan dengan komponen aplikasi (misalnya kumpulan koneksi database, perintah, struktur data seperti hashmaps) daripada entitas dunia nyata (seperti boarding pass, faktur, atau file mp3) ). Ada banyak buku bagus tentang pola desain yang menunjukkan kepada Anda cara orang telah memecahkan banyak masalah berulang di bidang ini. Buku GOF seperti diketahui menyeluruh tetapi sangat kering, Head First Design Patterns mungkin lebih mudah diakses.
Dalam hal analisis dan desain dunia nyata. Seringkali bermanfaat untuk berpikir dalam kata benda dan kata kerja. Misalnya perpustakaan pinjam video (apakah ini sudah usang sekarang?) Mungkin memiliki benda / kata benda ini:
Dalam hal kata kerja:
Ini kemudian dapat diubah menjadi kelas dengan operasi (sudah lama sejak saya melakukan PHP jadi saya akan menghindarinya):
Itu semua membutuhkan BANYAK latihan dan bermain-main. Hal terbaik untuk dilakukan adalah terjebak dan belajar dari desain yang gagal. Menurut pendapat saya, OO adalah sesuatu yang dapat terus Anda pelajari dan kembangkan sepanjang hidup Anda (itu tidak mudah dan tidak ada solusi sempurna untuk apa pun). Desain yang bagus sering kali berulang, jadi cobalah beberapa ide berbeda untuk aplikasi web "Craig's List" Anda.
sumber
Hal terbaik untuk dilakukan adalah menemukan cara untuk berkonsentrasi pada inti aplikasi Anda - "posting", "pengguna", "posting :: FindByName ()", "user-> Validate ()" dll, dan jangan khawatir terlalu banyak tentang saluran air - cara merekatkan posting ke tabel basis data, cara menjaga tampilan agar posting konsisten di antara berbagai pencarian, dan cara merekatkan formulir "masukkan posting" ke catatan database.
Untungnya, ada banyak kerangka kerja yang melakukan ini untuk Anda; paradigma dominan dalam aplikasi web OO adalah "Model-View-Controller", juga dikenal sebagai MVC ; di PHP, ada sejumlah kerangka kerja MVC off-the-shelf yang dapat Anda gunakan.
Sementara ini memperluas kebutuhan Anda untuk belajar - Anda sekarang harus belajar tentang MVC dan juga OO - itu berarti bahwa upaya OO Anda sebagian besar dibatasi pada lapisan "Model", yang mewakili domain bisnis Anda; di situlah OO paling alami dan ekspresif. Sebagian besar kerangka kerja MVC memungkinkan Anda untuk menentukan lapisan "model" Anda, dan kemudian secara otomatis membuat situs web di sekitarnya yang menggunakan teknik yang dikenal sebagai perancah - dengan cara itu, Anda mendapatkan cara cepat bereksperimen dengan berbagai implementasi untuk model domain Anda, tanpa harus menghapus semua pipa ledeng.
sumber