140 votos

¿Por qué debería utilizar Scala/elevación sobre Java/resorte?

Sé que esta pregunta es un poco abierta, pero he estado mirando Scala/ascensor como alternativa a Java/Spring y me pregunto ¿cuáles son las ventajas reales que Scala/ascensor tiene sobre él. Desde mi perspectiva y experiencia, las anotaciones de Java y el resorte realmente minimiza la cantidad de código que tienes que hacer para una aplicación. ¿Mejora la Scala/elevación sobre eso?

223voto

David Pollak Puntos 5756

Yo tengo que decir que estoy en desacuerdo con Dan LaRocque la respuesta.

Ascensor no es monolítica. Está compuesto por elementos discretos. No ignorar J/EE elementos, apoyo de la talla de JNDI, JTA, JPA, etc. El hecho de que usted no está obligado a usa estos elementos de J/EE es una fuerte indicación de Elevación de diseño modular.

  • Levante la vista de la filosofía es "permite al desarrollador decidir". Ascensor ofrece una de las plantillas de mecanismo que no permite que ningún código de lógica en el punto de vista, el mecanismo basa en la ejecución de la Scala de código y Scala XML literales, y una vista mecanismo basado en Scalate. Si usted elige el XML de plantillas mecanismo, a continuación, usted decide cuánto, si los hubiere, mark-up pertenece en su lógica de negocio. Levante la vista de la separación es más fuerte que cualquier cosa que Spring tiene para ofrecer, porque no se puede expresar con toda la lógica de negocio en el Ascensor de plantillas XML.
  • Levante el Objeto ↔ Persistencia de la filosofía es "permite al desarrollador decidir". Ascensor tiene Asignador de que es un ActiveRecord estilo object relational mapper. Consigue el trabajo hecho para los proyectos pequeños. Levante el soporte de JPA. Ascensor tiene un Registro de abstracción que apoya transportar objetos dentro y fuera de la bases de datos relacionales, dentro y fuera de NoSQL tiendas (Levante incluye soporte nativo para CouchDB y MongoDB, pero el adaptador de capas son un par de cientos de líneas de código, así que si quieres Cassandra o algo más, no es mucho trabajo hacerlo.) Básicamente, Ascensor para el Framework Web no tiene dependencia de cómo los objetos se materializan en una sesión. Además, la sesión y la solicitud de los ciclos abiertos tales que la inserción de transacción ganchos en la petición/ciclo de respuesta es simple.
  • Levante la filosofía es "el equipo del servidor debe saber un idioma, no varios idiomas." Esto significa que la configuración se realiza a través de la Scala. Esto significa que no teníamos para implementar el 40% de Java es el lenguaje de las construcciones en sintaxis XML para crear opciones de configuración flexibles. Esto significa que el compilador de la sintaxis y tipo de comprobaciones de los datos de configuración de modo de que no hay nada raro, análisis de XML o incorrecto de los datos en tiempo de ejecución. En los medios de que usted no tiene que tener IDEs que entender los detalles de las anotaciones que usted está usando basado en la librería que está utilizando.
  • Sí, la Elevación de la documentación no es su punto fuerte.

Con lo anterior dicho, permítanme hablar un poco acerca de la Elevación de la filosofía de diseño.

Escribí Web Marco de Manifiesto antes de que yo empezara a escribir Ascensor. En gran medida, y en mayor grado de lo que es cierto para cualquier otro framework web, que yo sepa, Ascensor cumple con estos objetivos.

Ascensor en su núcleo busca abstraen la petición HTTP/ciclo de respuesta en lugar de la colocación de objetos contenedores alrededor de la Petición HTTP. A nivel práctico, esto significa que la mayoría de cualquier acción que un usuario puede tomar presentación de elementos de formulario, haciendo Ajax, etc.) está representado por un GUID en el navegador y una función en el servidor. Cuando el GUID se presenta como parte de una petición HTTP, se aplica la función (llamada) con los parámetros proporcionados. Porque el Guid son difíciles de predecir y específicos de la sesión, los ataques de reproducción y muchas parámetro manipulación de los ataques son mucho más difíciles con la Elevación de la mayoría de los otros frameworks web, incluyendo Spring. También significa que los desarrolladores son más productivos porque se centra en las acciones del usuario y la lógica de negocio asociada con las acciones de usuario en lugar de la tubería de embalaje y desembalaje de una solicitud HTTP. Por ejemplo, el código para aceptar o rechazar a un Cuadrangular de solicitud de amigo:

ajaxButton("Accept", () => {request.accept.save; 
                            SetHtml("acceptrejectspan", <span/>}) ++ 
ajaxButton("Reject", () => {request.reject.save; 
                            SetHtml("acceptrejectspan", <span/>})

Es así de simple. Porque el friendRequest es en el ámbito de aplicación cuando se crea la función, la función se cierra sobre el alcance... no hay necesidad de exponer la clave principal de la solicitud de amigo o de hacer cualquier otra cosa... acabo de definir el texto del botón (puede ser localizada o puede ser extraído a partir de una plantilla XHTML o se puede extraer de forma localizada de la plantilla) y la función a ejecutar cuando el botón sea presionado. Levante se ocupa de asignar el GUID, el establecimiento de llamada de Ajax (a través de jQuery o de YUI, y sí, usted puede añadir su propio favorito de la biblioteca de JavaScript), haciendo reintentos automáticos con interrupciones, evitando la conexión de hambre por la cola de peticiones Ajax, etc.

Así, una gran diferencia entre el Ascensor y la Spring es la que Eleva la filosofía de la GUID asociado con la función tiene el doble beneficio de mucha mejor seguridad y mucho mejor la productividad de los desarrolladores. El GUID> la Función de la asociación ha demostrado ser muy resistente... la misma construcción de obras para el normal formas, ajax, comet, multi-página de asistentes, etc.

La principal pieza de Levante es mantener el alto nivel de las abstracciones alrededor de durante el mayor tiempo posible. En la página de generación de lado, que significa la construcción de la página como XHTML de los elementos y el mantenimiento de la pagina como XHTML hasta justo antes de la transmisión de la respuesta. Los beneficios son la resistencia a cross site scripting errores, la capacidad de mover etiquetas CSS para la cabeza y las secuencias de comandos en la parte inferior de la página después de la página ha sido compuesta, y la capacidad de volver a escribir la página basada en el navegador de destino. En el lado de entrada, las direcciones Url puede ser re-escrita para extraer los parámetros (consulta y el camino de los parámetros) en un tipo de manera segura, a alto nivel, pasan por controles de seguridad de datos está disponible para su procesamiento muy temprano en el ciclo de solicitud. Por ejemplo, aquí es cómo definir el mantenimiento de un RESTO de solicitud:

  serve {
    case "api" :: "user" :: AsUser(user) :: _ XmlGet _ => <b>{user.name}</b>
    case "api" :: "user" :: AsUser(user) :: _ JsonGet _ => JStr(user.name)
  }

El uso de Scala integrado en la coincidencia de patrones, hemos partido de una solicitud entrante, extracto de la tercera parte de la ruta de acceso al Usuario y obtener que corresponde a ese valor, e incluso de aplicar comprobaciones de control de acceso (el actual período de sesiones o solicitud tiene permisos para acceder a la dada registro de Usuario). Así que, por el momento la instancia de Usuario golpea la lógica de la aplicación, avalado.

Con estos dos principales piezas, Ascensor tiene una enorme ventaja en términos de seguridad. Para dar una idea de la magnitud de la Elevación de la seguridad de que no se interponga en el camino de las características, Rasmus Lerdorg que hizo de seguridad para Yahoo! tenía esto que decir acerca de la iglesia Cuadrangular (uno de los Eleva-cartel niño sitios):

Cuatro estrellas para @foursquare - 1er sitio en un rato me han echado un buen vistazo a que no tenía un solo problema de seguridad (que he podido encontrar) -- http://twitter.com/rasmus/status/5929904263

En el momento, FourSquare había un ingeniero que trabajaba en el código (no es que @harryh no es un super-genio) y su objetivo principal fue re-escritura de la versión de PHP de Cuadrangulares, mientras que lidiar con tráfico semanal de duplicación.

La última parte de Levante del enfoque de seguridad es SiteMap. Es un control de acceso unificado, navegación del sitio, y el sistema de menús. El desarrollador define las reglas de control de acceso para cada página utilizando la Scala de código (ej. If(User.loggedIn _) o If(User.superUser _)) y las reglas de control de acceso se aplica antes de cualquier página de la representación se inicia. Esto es como la Spring de Seguridad, salvo que se cuece en desde el principio del proyecto y de las reglas de control de acceso son unificada con el resto de la aplicación para no tener proceso para la actualización de las normas de seguridad en XML cuando la Url de cambio o los métodos que calculan el acceso de cambio de control.

Para resumir hasta ahora, Levante la filosofía de diseño le proporciona los beneficios de horneado en el control de acceso, la resistencia a la OWASP top 10 vulnerabilidades de seguridad, mucho mejor soporte de Ajax y mucho más la productividad de los desarrolladores de Spring.

Pero el Levante también le da a usted la mejor Cometa el apoyo de cualquier web de marco a su alrededor. Es por eso que Novell eligió Eleva a la potencia de su Pulso producto y esto es lo que Novell tiene que decir acerca de Ascensor:

Levante es el tipo de framework web que le permite a usted como a un desarrollador concentrarse en la imagen grande. Fuerte, expresiva de mecanografía y de alto nivel de características como la construido-en Cometa de apoyo permiten centrarse en innovar, en lugar de la plomería. La construcción de un rico, en tiempo real aplicación web como Novell pulse requiere un marco con el poder de Ascensor debajo de las cubiertas.

Así, el Levante no es un me-too MVC framework. Es un marco que tiene algunos principios de diseño detrás de ella que han madurado muy bien. Es un marco que le da el doble de las ventajas de la seguridad y la productividad de los desarrolladores. Levante es un marco que se construye en capas y le da al desarrollador el derecho de decisiones basadas en sus necesidades... opciones para la generación de la vista, la toma de decisiones para la persistencia, etc.

Scala y Lift ofrecer a los desarrolladores una experiencia mucho mejor que la mezcla de XML, anotaciones y otros lenguajes que conforman la Spring.

105voto

Dan LaRocque Puntos 2923

Supongamos que estamos igual de cómodo en Scala y Java, y de ignorar la (enorme) de las diferencias de idioma, excepto en lo que se refieren a la Spring o el Ascensor.

La primavera y el Ascensor son casi diametralmente opuestos en términos de madurez y metas.

  • La primavera está a unos cinco años mayor que Levante
  • Levante es monolítico y se centra únicamente en la web; la Spring es modular y objetivos tanto para la web como "regular" de las aplicaciones
  • Spring soporta una gran cantidad de Java EE características; Levante ignora que cosas

En una frase, la Spring es pesado y Levantar es ligero. Con la suficiente determinación y los recursos que usted puede dar vuelta en su cabeza, pero necesita un montón de ambos.

Aquí se concreta diferencias que se quedó en mi mente después de trabajar con ambos marcos. Esta no es una lista exhaustiva, que yo no puedo compilar todos modos. Justo lo que me pareció más interesante para mí...

  1. Vista de la filosofía

    Lift sugiere que la colocación de algún punto de vista material en el fragmento/métodos de acción. Fragmento de código especial será rociada con generadas por los elementos de formulario, <div>s, <p>s, etc.

    Este es potente y útil, especialmente desde la Scala se ha incorporado un nivel de lenguaje XML modo. Uno puede escribir XML en línea dentro de la Scala de métodos, incluyendo la variable de enlaces en los apoyos. Esto puede ser agradable para los muy simple XML services o maquetas de servicios-usted puede golpear una suite de HTTP acciones de respuesta, todo en uno espléndidamente lacónico archivo, sin plantillas ni mucho configuración de operador. La desventaja es la complejidad. Dependiendo de lo lejos que vaya, hay una difusa la separación de preocupaciones entre la vista y la lógica, o no la separación.

    En contraste, el uso regular de la Spring para webapps impone una fuerte separación entre la vista y todo lo demás. Creo que la Spring es compatible con varios motor de plantillas, pero sólo lo he usado JSP en nada serio. Haciendo un Levantamiento inspirado en "fuzzy " MVC" diseño con JSP sería una locura. Esta es una buena cosa en proyectos grandes, donde el tiempo para leer y entender puede ser abrumador.

  2. Object-Relational Mapper Opciones

    Ascensor integradas ORM es "Mapper". Hay una próxima alternativa denominada "Registro", pero creo que todavía es considerado pre-alpha. El LiftWeb Libro tiene secciones sobre el uso de ambos Mapper y JPA.

    Levante la CRUDify característica, fresco como es, sólo funciona con el Mapper (y no JPA).

    Por supuesto, la Spring soporta una variedad de estándares y/o madurez de las tecnologías de base de datos. La palabra clave no es "compatible". Teóricamente, se puede usar cualquier Java ORM con Ascensor, desde que se puede llamar arbitraria de código Java a partir de la Scala. Pero el Ascensor sólo apoya de verdad Mapper y (en menor medida) JPA. También, trabajando con trivial código Java en la Scala actualmente no es tan perfecta como se quiera; el uso de Java en ORM, probablemente te encontrarás ya sea usando Java y Scala colecciones en todas partes o la conversión de todas las colecciones y de los componentes de Java.

  3. Configuración

    Ascensor aplicaciones están configuradas bastante completo a través de un método de aplicación una amplia gama de "Arranque" de la clase. En otras palabras, la configuración se realiza a través de la Scala de código. Esto es perfecto para proyectos con una breve reseña de las configuraciones, y cuando la persona que realiza la configuración es cómodo edición de Scala.

    La primavera es bastante flexible en términos de configuración. Un montón de conf opciones puede ser impulsado a través de la configuración XML o anotaciones.

  4. Documentación

    Levantamiento de la documentación es el de los jóvenes. La primavera docs son bastante maduros. No hay ningún concurso.

    Desde la Spring del docs ya están muy bien organizados y fáciles de encontrar, voy a revisar la documentación que he encontrado por Ascensor. Básicamente, existen 4 fuentes de Levantamiento de la documentación: la LiftWeb Libro, la API de google Docs, LiftWeb del grupo de Google, y en "empezar". También hay un agradable conjunto de ejemplos de código, pero yo no llamaría a ellos "documentación" de por sí.

    La API de google docs son incompletos. El LiftWeb Libro ha sido publicado en los árboles, pero también es disponible gratuitamente en internet. Es realmente útil, aunque su decididamente estilo didáctico me irrita a veces. Es un poco largo tutorial corto y en el contrato. La primavera tiene un adecuado manual, que carece de Ascensor.

    Pero el Levante tiene un buen conjunto de ejemplos. Si usted se siente cómodo en la lectura de la Elevación de código y un código de ejemplo (y usted sabe Scala bien ya), usted puede resolver las cosas en un plazo bastante corto.

Ambos marcos son de peso. Hay una amplia gama de aplicaciones, en donde usted puede elegir y hacer el bien.

11voto

IPC Puntos 134

Te recomiendo que veas jugar marco, tiene algunas ideas muy interesantes y apoya el desarrollo en Java y Scala

10voto

Roman Puntos 21807

Sólo por diversión. Y en aras de aprender nuevo enfoques de programación.

8voto

mguymon Puntos 4527

Estoy totalmente de miró en el uso de Elevación para un reciente proyecto de la web, no siendo un gran fan de Spring MVC. No he utilizado las últimas versiones, pero las versiones anteriores de MVC de Spring hizo saltar a través de un montón de aros para conseguir una aplicación web se ejecuta. Yo estaba casi vendido en Ascensor hasta que vi que el Ascensor puede ser muy dependiente de la sesión y requeriría 'sticky sessions' para que funcione correctamente. Extracto de http://exploring.liftweb.net/master/index-9.html#sec:Session-Management

Hasta que no hay un estándar de la sesión de la tecnología de replicación puede todavía clúster de la aplicación utilizando "sticky sesión". Este amuma de que todos los las solicitudes relativas a una sesión HTTP, debe ser procesado por el mismo nodo de clúster

Así que una vez que la Sesión es necesario, el usuario tendría que ser pin para ese nodo. Esto crea la necesidad de inteligente balanceo de carga y afecta de escala, lo que impidió que se Levante de ser una solución en mi caso. Terminé la selección http://www.playframework.org/ y han sido muy satisfecho. El juego ha sido estable y confiable hasta el momento y muy fácil trabajar con ellos.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X