Треба сказати, що я категорично не згоден з відповіддю Дена Ларока.
Підйом не монолітний. Він складається на дискретних елементах. Він не ігнорує елементи J / EE, він підтримує подібність JNDI, JTA, JPA тощо. Те, що ви не змушені використовувати ці елементи J / EE, є яскравим свідченням модульної конструкції Lift.
- Філософія погляду Lift - це "нехай розробник вирішує". Lift пропонує механізм шаблонування, який не допускає жодного логічного коду у представленні, механізм перегляду, заснований на виконанні коду Scala та XML-літералах Scala, та механізм перегляду на основі Scalate . Якщо ви вибрали механізм шаблонів XML, то ви виберете, скільки (якщо є) надбавки належить вашій бізнес-логіці. Відокремлення підйому Lift є сильнішим за все, що може запропонувати Весна, оскільки ви не можете висловити будь-яку ділову логіку в XML-шаблонах Lift.
- Об'єкт Lift philosophy Філософія стійкості - це "нехай розробник вирішує". У ліфті є Mapper, який є реляційним картографічним об'єктом у стилі ActiveRecord. Це робить роботу для малих проектів. Підтримка підтримки JPA. У ліфті є абстракція записів, яка підтримує перевезення об'єктів в реляційні бази даних і в них, в і з магазинів NoSQL (Lift включає в себе вбудовану підтримку CouchDB і MongoDB, але шари адаптерів - це кілька сотень рядків коду, тому якщо ви хочете, щоб Cassandra або щось інше, це не так багато роботи, щоб отримати його.) В основному, Підняття веб-рамки не залежить від того, як об’єкти матеріалізуються на сеанс. Крім того, цикли сеансу та запиту відкриті таким чином, що вставити гачки транзакцій у цикл запит / відповідь просто.
- Філософія Lift полягає в тому, що "серверна команда повинна знати одну мову, а не кілька мов". Це означає, що конфігурація здійснюється через Scala. Це означає, що нам не довелося реалізовувати 40% мовних конструкцій Java в синтаксисі XML, щоб створити гнучкі параметри конфігурації. Це означає, що синтаксис і тип компілятора перевіряє конфігураційні дані, щоб у вас не було ніякого дивного розбору XML або неправильних даних під час виконання. Це означає, що вам не потрібно мати IDE, які розуміють деталі приміток, які ви використовуєте, на основі бібліотеки, яку ви використовуєте.
- Так, документація Lift не є її сильною стороною.
Якщо говорити вище, дозвольте мені поговорити про філософію дизайну Lift.
Я писав маніфест Web Framework, перш ніж почав писати Lift. Значною мірою, і в більшій мірі, ніж це стосується будь-яких інших веб-рамок, про які я знаю, Lift відповідає цим цілям.
Lift в своїй основі прагне абстрагувати цикл запиту / відповіді HTTP, а не розміщувати обгортки об'єктів навколо HTTP-запиту. На практичному рівні це означає, що більшість будь-яких дій, які може здійснити користувач (подання елементів форми, виконання Ajax тощо), представлені GUID у браузері та функцією на сервері. Коли GUID представлений як частина HTTP-запиту, функція застосовується (називається) із наданими параметрами. Оскільки GUID важко передбачити та залежно від сеансу, повторні атаки та багато атак з підстановкою параметрів набагато складніше з Lift, ніж більшість інших веб-фреймів, включаючи Spring. Це також означає, що розробники є більш продуктивними, оскільки вони зосереджуються на діях користувача та бізнес-логіці, пов'язаній з діями користувача, а не на упаковці та розпакуванні HTTP-запиту.
ajaxButton("Accept", () => {request.accept.save;
SetHtml("acceptrejectspan", <span/>}) ++
ajaxButton("Reject", () => {request.reject.save;
SetHtml("acceptrejectspan", <span/>})
Це так просто. Оскільки friendRequest знаходиться в області застосування, коли функція створена, функція закривається за рамками ... немає необхідності викривати первинний ключ запиту на друзі або робити щось інше ... просто визначте текст кнопки (це може бути локалізованим або його можна витягнути з шаблону XHTML або його можна витягнути з локалізованого шаблону) та функцію для виконання при натисканні кнопки. Lift піклується про призначення GUID, налаштування виклику Ajax (через jQuery або YUI, і так, ви можете додати свою власну улюблену бібліотеку JavaScript), робити автоматичні спроби із зворотним відключенням, уникаючи голодування підключення, чергуючи запити Ajax тощо.
Отже, одна велика різниця між Lift та Spring полягає в тому, що філософія Lift щодо GUID, пов’язаного з функцією, має подвійну перевагу набагато кращої безпеки та значно кращої продуктивності розробника. Асоціація GUID -> Function виявилася дуже довговічною ... та сама конструкція працює для нормальних форм, аякса, комети, майстрів на багато сторінок тощо.
Наступним основним твором Ліфта є збереження високих абстракцій навколо якомога довше. Що стосується покоління сторінки, це означає побудувати сторінку як XHTML-елементи та зберегти її як XHTML до того часу, поки не буде передано відповідь. Перевагами є стійкість до помилок сценаріїв між веб-сайтами, можливість переміщення тегів CSS до голови та сценаріїв у нижній частині сторінки після того, як сторінка складена, та можливість переписати сторінку на основі цільового браузера. З боку введення URL-адреси можуть бути переписані для вилучення параметрів (як запиту, так і параметрів шляху) безпечним для вас типом, дані високого рівня, перевірені безпекою, доступні для обробки дуже рано на циклі запитів. Наприклад, ось як визначити обслуговування запиту REST:
serve {
case "api" :: "user" :: AsUser(user) :: _ XmlGet _ => <b>{user.name}</b>
case "api" :: "user" :: AsUser(user) :: _ JsonGet _ => JStr(user.name)
}
Використовуючи вбудовану схему відповідності шаблонів Scala, ми узгоджуємо вхідний запит, витягуємо третю частину шляху і отримуємо Користувача, що відповідає цьому значенню, і навіть застосовуємо перевірки контролю доступу (чи має поточний сеанс чи запит дозволу на доступ до заданої Запис користувача). Отже, до моменту, коли екземпляр користувача потрапляє у логіку програми, він перевіряється.
З цими двома основними елементами Lift має величезну перевагу з точки зору безпеки. Щоб дати вам уявлення про величину безпеки Lift, яка не заважає можливостям, Расмус Лердорг, який зробив безпеку для Yahoo! мав це сказати про FourSquare (один із сайтів для дітей, що займаються плакатами Lift):
Чотири зірки на @foursquare - 1-й сайт через деякий час, я добре роздивився, що не було жодної проблеми безпеки (яку я міг знайти) - http://twitter.com/rasmus/status/5929904263
У той час у FourSquare був один інженер, який працював над кодом (не те, що @harryh не супергеній), і його головна увага була переписування PHP-версії FourSquare під час подолання подвоєння трафіку.
Остання частина фокусу безпеки на ліфті - SiteMap. Це єдиний контроль доступу, навігація по сайту та система меню. Розробник визначає правила контролю доступу для кожної сторінки за допомогою коду Scala (наприклад, If(User.loggedIn _)
або If(User.superUser _)
), і ці правила контролю доступу застосовуються до початку будь-якої візуалізації сторінки. Це дуже схоже на Spring Security, за винятком того, що він створений з початку проекту, а правила контролю доступу уніфіковані з рештою програми, тому вам не потрібно мати процес оновлення правил безпеки в XML, коли URL-адреси зміни або методи, що обчислюють зміни доступу.
Підводячи підсумок до цього часу, філософія дизайну Lift дає вам переваги від контролю доступу, стійкості до вразливих версій OWASP, що впадає в топ 10, набагато краща підтримка Ajax та набагато вища продуктивність розробників, ніж у Spring.
Але Lift також надає вам найкращу підтримку Comet будь-якої веб-рамки навколо. Ось чому Novell обрав Lift для живлення свого продукту Pulse, і ось що Novell може сказати про Lift:
Lift - це така веб-структура, яка дозволяє вам як розробнику зосередитись на великій картині. Сильні, виразні функції набору тексту та вищого рівня, такі як вбудована підтримка Comet, дозволяють зосередитись на інноваціях замість сантехніки. Для створення розгалуженого веб-додатку в реальному часі, такого як Novell Pulse, потрібна основа з потужністю Lift під кришками.
Отже, Lift - це не просто ще одна рамка MVC. Це рамка, яка має деякі основні принципи дизайну, які визріли дуже добре. Це рамка, яка дає подвійні переваги безпеки та продуктивності розробника. Lift - це структура, яка побудована в шарах і дає розробникові правильний вибір залежно від їх потреб ... вибір для генерації перегляду, вибір для стійкості тощо.
Scala і Lift надають розробникам набагато кращий досвід, ніж меланж XML, анотацій та інших ідіом, які складають Весну.