Bagaimana membangun aplikasi web yang sepenuhnya modular [tertutup]

34

Dalam beberapa bulan mendatang kita akan memulai proyek di mana kita mengambil sistem yang telah kita bangun untuk klien (v1) dan membangunnya kembali dari awal. Tujuan kami dengan v2 adalah membuatnya modular, sehingga klien spesifik ini akan memiliki set modul mereka sendiri yang digunakan, maka klien lain dapat menggunakan set modul yang berbeda secara bersamaan. Kuncinya di sini adalah bahwa Perusahaan A mungkin memiliki serangkaian modul checkout dan pengguna yang mengubah cara kerja sistem itu. Perusahaan B mungkin tetap dengan prosedur checkout standar tetapi menyesuaikan bagaimana produk ditelusuri.

Apa saja pendekatan yang baik untuk arsitektur aplikasi ketika Anda membangun aplikasi dari awal yang ingin Anda miliki Coreyang dibagikan di antara semua klien sambil tetap mempertahankan fleksibilitas untuk apa pun yang akan dimodifikasi khusus untuk klien?

Saya telah melihat kait CodeIgniter dan tidak berpikir itu solusi yang baik karena kita bisa berakhir dengan 250 kait dan itu masih belum cukup fleksibel. Apa sajakah solusi lain? Idealnya kita tidak perlu menggambar garis di pasir.

Webnet
sumber

Jawaban:

26

Untuk mencapai modularitas yang sangat terorganisir dan terpisah, Anda dapat mengikuti pola arsitektur MVC Hierarchical , kadang-kadang dikenal sebagai Presentation-abstraction-control (meskipun mereka tidak sepenuhnya pola yang sama). Kohana , Alloy , Fluency dan FuelPHP mendukung HMVC secara native * dan pendekatan HMVC Kohana didiskusikan dalam Menskalakan Aplikasi Web dengan HMVC dan Mengoptimalkan Aplikasi Web HMVC untuk Kinerja , oleh Sam de Freyssinet .

Sayangnya CodeIgniter tidak mendukung HMVC secara asli. Saya telah membangun perpustakaan saya sendiri untuk memberikan semacam dukungan HMVC pada CodeIgniter, mengambil beberapa inspirasi dari codeigniter-modular-extensions-hmvc cableesignz . Ada pengantar yang sangat bagus untuk artikel HMVC di nettus +, yang membahas tentang ekstensi CodeIgniter dan wiredesignz. Gambar dan kutipan berikut berasal dari tutorial itu:

masukkan deskripsi gambar di sini

Setiap triad berfungsi secara independen satu sama lain. Triad dapat meminta akses ke triad lain melalui pengontrolnya. Kedua titik ini memungkinkan aplikasi untuk didistribusikan di beberapa lokasi, jika diperlukan. Selain itu, pelapisan triad MVC memungkinkan pengembangan aplikasi yang lebih mendalam dan kuat. Ini mengarah pada beberapa keuntungan yang membawa kita ke poin berikutnya.

Akhirnya, Anda berada di jalur yang benar dengan kait, bahkan jika Anda mengadopsi arsitektur HMVC, akan ada beberapa masalah yang masih harus Anda selesaikan dengan kait, tergantung pada implementasi Anda dan tingkat otomatisasi yang Anda cari . Penggunaan kait yang baik akan menjadi pre_controllerkait yang akan memastikan semua dependensi untuk modul yang terpasang ada, misalnya.

* Mungkin ada orang lain yang tidak saya kenal.

yannis
sumber
1
Apakah ASP.NET MVC memiliki dukungan untuk ini?
Robert Harvey
@RobertHarvey Saya tidak tahu ...
yannis
@ Robert Harvey Bagi saya ini sepertinya lebih dari sebuah pola daripada kerangka kerja. Mungkin saya kehilangan sesuatu tetapi saya tidak bisa melihat mengapa saya tidak bisa melakukan ini dengan warisan di ASP.NET MVC.
Jeremy
3
@ Jeremy: Ini menjadi sulit dalam tampilan, terutama jika Anda ingin menggunakan kembali bagian tampilan. Itu terlihat menarik, tapi saya merasa sulit untuk memvisualisasikan di tingkat mur dan baut.
Robert Harvey
Dalam diagram di atas, sepertinya tampilan tingkat atas sedang disusun dari tampilan yang lebih kecil yang terletak lebih rendah di hierarki. Itu sudah bisa dilakukan sampai batas tertentu denganRenderAction()
Robert Harvey
5

Saya bukan orang PHP, tetapi di sisi java-script jika Anda akan memiliki banyak modul yang Anda ingin tetap independen mungkin ada beberapa sistem untuk ini, seperti RequireJS , yang memiliki java-script modul yang menyatakan dependensi pada modul lain, dan kerangka kerja memastikan mereka dimuat saat diperlukan.

Berbagai kerangka kerja di luar sana bervariasi dalam bagaimana dependensi dideklarasikan, berapa banyak penanganan dependensi dilakukan sebagai langkah pembangunan di server, pada pemuatan halaman, atau secara dinamis berdasarkan permintaan, dan seberapa banyak Anda harus mengubah cara Anda menulis java- Anda naskah.

Kerangka kerja ini tidak berlaku sebanyak (atau mungkin sama sekali) jika kerangka sisi server Anda menangani ini atau membuat skrip java untuk Anda, tetapi Anda mungkin ingin agar skrip java Anda independen dari kerangka sisi server Anda.

Jika Anda tidak memiliki terlalu banyak java-script tetapi Anda menginginkan beberapa modularitas, Anda selalu dapat tetap menggunakan fungsi self-calling anonim yang menangani dependensi dengan memesan tag script dengan dependensi terlebih dahulu, dan mereferensikan satu sama lain dengan mendaftarkan diri dengan satu objek di namespace global. Setidaknya itu membuat mereka hampir modular dan tidak perlu biaya banyak untuk mengimplementasikannya.

psr
sumber
0

Berikut adalah beberapa petunjuk tentang cara melakukan desain modular: https://class.coursera.org/saas/lecture/preview/9

juga ini: " SOA dapat dilihat dalam sebuah kontinum, dari konsep lama dari komputasi terdistribusi dan pemrograman modular , melalui SOA, dan ke praktik-praktik mashup saat ini, SaaS , ..."

Organisasi kode HMVC dengan sendirinya, tidak selalu mengarah pada modularitas.

Goce Ribeski
sumber