Saya harus mengatakan bahwa saya sangat tidak setuju dengan jawaban Dan LaRocque.
Angkat bukan monolitik. Ini tersusun atas elemen-elemen diskrit. Itu tidak mengabaikan elemen J / EE, itu mendukung orang-orang seperti JNDI, JTA, JPA, dll. Fakta bahwa Anda tidak dipaksa untuk menggunakan elemen-elemen J / EE ini merupakan indikasi kuat dari desain modular Lift.
- Filosofi pandangan Lift adalah "biarkan pengembang yang memutuskan." Lift menawarkan mekanisme templating yang tidak memungkinkan kode logika dalam tampilan, mekanisme tampilan berdasarkan mengeksekusi kode Scala dan XML literal Scala, dan mekanisme tampilan berdasarkan Scalate . Jika Anda memilih mekanisme templating XML, maka Anda memilih berapa banyak, jika ada, mark-up yang termasuk dalam logika bisnis Anda. Pemisahan tampilan Lift lebih kuat daripada apa pun yang ditawarkan Spring karena Anda tidak dapat mengekspresikan logika bisnis apa pun di templat XML Lift.
- Objek Angkat ↔ Filsafat kegigihan adalah "biarkan pengembang yang memutuskan." Lift memiliki Mapper yang merupakan mapper relasional objek gaya ActiveRecord. Ini menyelesaikan pekerjaan untuk proyek-proyek kecil. Angkat dukungan JPA. Lift memiliki catatan abstraksi yang mendukung benda bolak-balik masuk dan keluar dari basis data relasional, masuk dan keluar dari toko NoSQL (Lift termasuk dukungan asli untuk CouchDB dan MongoDB, tetapi lapisan adaptor adalah beberapa ratus baris kode, jadi jika Anda ingin Cassandra atau sesuatu yang lain, itu tidak banyak pekerjaan untuk mendapatkannya.) Pada dasarnya, Angkat Kerangka Web tidak memiliki ketergantungan pada bagaimana objek dimaterialisasikan ke dalam sesi. Lebih lanjut, siklus sesi dan permintaan terbuka sehingga memasukkan kait transaksi ke dalam siklus permintaan / respons mudah.
- Filosofi Lift adalah "tim server perlu tahu satu bahasa, bukan beberapa bahasa." Ini berarti konfigurasi dilakukan melalui Scala. Ini berarti bahwa kami tidak harus mengimplementasikan 40% dari konstruksi bahasa Jawa dalam sintaks XML untuk membuat opsi konfigurasi yang fleksibel. Ini berarti bahwa sintaksis kompiler dan ketik-periksa data konfigurasi sehingga Anda tidak mendapatkan parsing XML aneh atau data yang salah saat runtime. Artinya, Anda tidak harus memiliki IDE yang memahami rincian penjelasan yang Anda gunakan berdasarkan pustaka yang Anda gunakan.
- Yap, dokumentasi Lift bukan kelebihannya.
Dengan kata-kata di atas, izinkan saya berbicara tentang filosofi desain Lift.
Saya menulis Manifesto Kerangka Web sebelum saya mulai menulis Lift. Untuk tingkat yang lebih tinggi, dan ke tingkat yang lebih besar daripada yang berlaku untuk kerangka kerja web lainnya yang saya ketahui, Lift memenuhi tujuan ini.
Angkat pada intinya berusaha mengabstraksi siklus permintaan / respons HTTP alih-alih menempatkan pembungkus objek di sekitar Permintaan HTTP. Pada tingkat praktis, ini berarti bahwa sebagian besar tindakan apa pun yang dapat dilakukan pengguna (mengirimkan elemen formulir, melakukan Ajax, dll.) Diwakili oleh GUID di browser dan fungsi di server. Ketika GUID disajikan sebagai bagian dari permintaan HTTP, fungsi diterapkan (disebut) dengan parameter yang disediakan. Karena GUID sulit diprediksi dan khusus untuk sesi, serangan replay dan banyak serangan pengrusakan parameter jauh lebih sulit dengan Lift daripada kebanyakan kerangka kerja web lainnya, termasuk Spring. Ini juga berarti bahwa pengembang lebih produktif karena mereka berfokus pada tindakan pengguna dan logika bisnis yang terkait dengan tindakan pengguna daripada plumbing pengepakan dan membongkar permintaan HTTP.
ajaxButton("Accept", () => {request.accept.save;
SetHtml("acceptrejectspan", <span/>}) ++
ajaxButton("Reject", () => {request.reject.save;
SetHtml("acceptrejectspan", <span/>})
Sesederhana itu. Karena friendRequest ada dalam ruang lingkup ketika fungsi dibuat, fungsi tersebut menutup ruang lingkup ... tidak perlu mengekspos kunci utama dari permintaan teman atau melakukan hal lain ... cukup tentukan teks tombol (itu dapat dilokalisasi atau dapat ditarik dari template XHTML atau dapat ditarik dari templat yang dilokalkan) dan fungsi untuk mengeksekusi ketika tombol ditekan. Lift dengan hati-hati menetapkan GUID, mengatur panggilan Ajax (melalui jQuery atau YUI, dan ya, Anda dapat menambahkan perpustakaan JavaScript favorit Anda sendiri), melakukan coba ulang otomatis dengan back-off, menghindari kelaparan koneksi dengan mengantri permintaan Ajax, dll.
Jadi, satu perbedaan besar antara Lift dan Spring adalah bahwa filosofi Lift tentang GUID yang terkait dengan fungsi memiliki manfaat ganda yaitu keamanan yang jauh lebih baik dan produktivitas pengembang yang jauh lebih baik. GUID -> Function asosiasi telah terbukti sangat tahan lama ... konstruksi yang sama berfungsi untuk bentuk normal, ajax, komet, penyihir multi-halaman, dll.
Bagian inti berikutnya dari Lift adalah menjaga abstraksi level tinggi sekitar selama mungkin. Di sisi pembuatan halaman, itu berarti membangun halaman sebagai elemen XHTML dan menjaga halaman sebagai XHTML sampai sebelum streaming tanggapan. Manfaatnya adalah penolakan terhadap kesalahan penulisan skrip situs, kemampuan untuk memindahkan tag CSS ke kepala dan skrip ke bagian bawah halaman setelah halaman dibuat, dan kemampuan untuk menulis ulang halaman berdasarkan browser target. Di sisi input, URL dapat ditulis ulang untuk mengekstrak parameter (parameter kueri dan path) dengan cara yang aman, tingkat tinggi, data keamanan diperiksa tersedia untuk diproses sangat awal dalam siklus permintaan. Misalnya, berikut ini cara mendefinisikan layanan permintaan REST:
serve {
case "api" :: "user" :: AsUser(user) :: _ XmlGet _ => <b>{user.name}</b>
case "api" :: "user" :: AsUser(user) :: _ JsonGet _ => JStr(user.name)
}
Menggunakan pencocokan pola bawaan Scala, kami mencocokkan permintaan masuk, mengekstrak bagian ketiga dari jalur dan mendapatkan Pengguna yang sesuai dengan nilai itu, dan bahkan menerapkan pemeriksaan kontrol akses (apakah sesi atau permintaan saat ini memiliki izin untuk mengakses yang diberikan Catatan pengguna). Jadi, pada saat contoh pengguna menyentuh logika aplikasi, itu diperiksa.
Dengan dua bagian inti ini, Lift memiliki keunggulan luar biasa dalam hal keamanan. Untuk memberi Anda gambaran tentang besarnya keamanan Lift yang tidak menghalangi fitur, Rasmus Lerdorg yang melakukan keamanan untuk Yahoo! mengatakan ini tentang FourSquare (salah satu situs poster-anak Lift):
Empat bintang ke @foursquare - situs pertama dalam beberapa waktu saya telah memperhatikan bahwa tidak ada masalah keamanan tunggal (yang dapat saya temukan) - http://twitter.com/rasmus/status/5929904263
Pada saat itu, FourSquare memiliki satu insinyur yang mengerjakan kode (bukan @harryh bukan super-genius) dan fokus utamanya adalah menulis ulang versi PHP FourSquare sambil mengatasi penggandaan lalu lintas mingguan.
Bagian terakhir dari fokus keamanan Lift adalah SiteMap. Ini adalah kontrol akses terpadu, navigasi situs, dan sistem menu. Pengembang menentukan aturan kontrol akses untuk setiap halaman menggunakan kode Scala (misalnya If(User.loggedIn _)
atau If(User.superUser _)
) dan aturan kontrol akses tersebut diterapkan sebelum rendering halaman dimulai. Ini sangat mirip dengan Spring Security, kecuali bahwa itu dipanggang sejak awal proyek dan aturan kontrol akses disatukan dengan aplikasi lainnya sehingga Anda tidak perlu memiliki proses untuk memperbarui aturan keamanan dalam XML ketika URL mengubah atau metode yang menghitung perubahan kontrol akses.
Untuk meringkas sejauh ini, filosofi desain Lift memberi Anda manfaat dari panggang dalam kontrol akses, resistensi terhadap 10 kerentanan keamanan OWASP, dukungan Ajax yang jauh lebih baik dan produktivitas pengembang yang jauh lebih tinggi daripada Spring.
Tetapi Lift juga memberi Anda dukungan Comet terbaik dari semua kerangka kerja web di sekitarnya. Itulah mengapa Novell memilih Lift untuk memberi daya pada produk Pulse mereka dan inilah yang dikatakan Novell tentang Lift:
Lift adalah jenis kerangka kerja web yang memungkinkan Anda sebagai pengembang untuk berkonsentrasi pada gambaran besar. Fitur pengetikan yang kuat, ekspresif, dan tingkat yang lebih tinggi seperti dukungan Comet bawaan memungkinkan Anda untuk fokus pada inovasi alih-alih pipa ledeng. Membangun aplikasi web yang kaya dan real-time seperti Novell Pulse membutuhkan kerangka kerja dengan kekuatan Lift di bawah selimut.
Jadi, Angkat bukan hanya kerangka kerja saya-terlalu MVC. Ini adalah kerangka kerja yang memiliki beberapa prinsip desain inti di belakangnya yang telah matang dengan sangat baik. Ini adalah kerangka kerja yang memberikan keuntungan ganda dari keamanan dan produktivitas pengembang. Lift adalah kerangka kerja yang dibangun berlapis-lapis dan memberi pengembang pilihan yang tepat berdasarkan kebutuhan mereka ... pilihan untuk generasi tampilan, pilihan untuk kegigihan, dll.
Scala dan Lift memberi pengembang pengalaman yang jauh lebih baik daripada perpaduan XML, anotasi, dan idiom lain yang membentuk Spring.