Katakanlah saya sedang mengembangkan aplikasi web. Pilihan pertama saya adalah menggunakan PHP dengan Fat-Free Framework (F3) dan pola MVC. Tahun depan, saya mungkin memutuskan ingin beralih ke Zend Framework, atau bahkan ASP.NET MVC. Apakah masuk akal untuk mencoba dan merancang aplikasi saya sedemikian rupa sehingga secara longgar digabungkan dengan kerangka kerjanya, atau apakah kerangka kerja terlalu integral untuk membuat ini realistis?
Satu-satunya alasan saya bertanya adalah karena muncul dalam percakapan dengan seorang rekan baru-baru ini, yang mengkritik pie saya di langit gagasan longgar menggabungkan aplikasi saya ke F3.
design-patterns
object-oriented
frameworks
David Kennedy
sumber
sumber
Jawaban:
Menggabungkan aplikasi Anda ke kerangka kerjanya secara longgar berarti Anda akan menulis kerangka kerja proxy. Menulis kerangka kerja proxy itu banyak pekerjaan, dan jika Anda pernah beralih ke kerangka kerja baru Anda harus melakukan banyak pekerjaan untuk membuat kerangka kerja proxy mendukung kerangka kerja baru. Tentu saja, kerangka kerja yang berbeda menggunakan idiom dan pola yang berbeda, yang akan membuat kerangka kerja proxy menjadi sangat kompleks (jika Anda mencoba membuatnya cocok untuk semuanya) atau sangat terbatas (jika Anda menggunakan penyebut umum terendah). Bagaimanapun Anda harus berjuang dengan kerangka kerja proxy itu.
Apakah memiliki kemampuan untuk mengubah kerangka kerja sesuai keinginan semua masalah ini? Seperti yang saya katakan, Anda tidak akan dapat mengubahnya dengan hati-hati karena Anda harus menyesuaikan kerangka kerja proxy, yang mungkin ternyata lebih berfungsi daripada menyesuaikan kode aplikasi secara langsung.
sumber
Tidak bisa.
Anda dapat merancang dengan cara yang portabel di seluruh kerangka kerja. MVC adalah MVC, dan prinsipnya hampir sama apa pun bahasa atau platform yang digunakan.
Namun, kode aktual akan sangat bergantung pada kerangka atau bahasa. Satu-satunya cara untuk mengabstraksikan diri Anda dari itu adalah dengan membuat kode berdasarkan kerangka kerja perantara. Kemudian Anda dapat memiliki perubahan implementasi menengah (dari F3 ke .NET?) Tanpa mengubah aplikasi. Yang banyak pekerjaannya, mengasumsikan abstraksi yang tidak bocor, dan hanya memindahkan masalah tanpa menyelesaikannya: Anda sekarang terikat pada kerangka kerja menengah Anda.
Pada catatan yang lebih positif: pertimbangkan untuk mengekspresikan beberapa tes Anda (gaya BDD) dalam platform yang independen dari implementasi Anda. Itu mungkin selamat dari penulisan ulang utama.
sumber
Saya pernah melihat Robert C. Martin memberikan ceramah di mana dia mengatakan sesuatu di sepanjang baris "keputusan pertama yang Anda buat adalah yang paling sulit untuk diubah nanti".
Jadi saran saya adalah mencoba untuk menunda keputusan ini jika Anda belum yakin apa yang ingin Anda gunakan. Identifikasi karya yang dapat Anda definisikan sekarang, dan yang akan dengan mudah tetap independen dari kerangka apa pun yang akhirnya Anda gunakan.
sumber
Lock-in framework bisa menjadi masalah serius, tetapi membantu untuk melihat masalah sebagai salah satu portabilitas. Portabilitas bukan atribut absolut, tetapi relatif terhadap titik awal Anda dan ke mana Anda mungkin ingin pergi. Dengan analogi, maka, perangkat lunak adalah portabel hanya sejauh Anda telah porting ke lingkungan lain.
Sebagian besar pengembangan aplikasi di dalam kerangka cenderung menjadi kode lem, hal-hal yang mengikat komponen-komponen kerangka kerja Anda bersama-sama. File konfigurasi dapat mengabstraksi sejumlah lem dalam beberapa sistem tetapi banyak detail halus harus dilakukan dalam kode.
Di sisi lain, aturan dan proses bisnis dapat disarikan dari aplikasi. Bagian yang sulit dari abstraksi adalah ketika aturan diterapkan langsung oleh kerangka kerja; keamanan, aksesibilitas dan urutan proses cenderung ditegakkan oleh kerangka kerja Anda dan mungkin paling sulit untuk dilihat.
Jika Anda dapat memisahkan bagian lem aplikasi Anda dari aturan bisnis dan proses bisnis dan bagian data bisnis, maka Anda akan dapat membuat beberapa bagian dari solusi Anda portabel.
sumber