definicion - ¿Haciendo la vida mejor no utilizando marcos web de Java?
jlabel definicion (13)
En mis viejos tiempos de codificación PHP, cuando la codificación aún era divertida y productiva, solía escribir mis propios marcos para la mayoría de las cosas y simplemente copiarlos y pegarlos de un proyecto a otro. Este enfoque se pagó muy bien, lo que resultó en un rápido desarrollo, sin gastos generales y un marco que en realidad era más poderoso que la mayoría de los marcos de Java existentes.
Perdóname por creer que ni un segundo.
pero con solo unos pocos cientos de líneas de código en un solo archivo más algunas reglas mod_rewrite simples. Esto ciertamente no resolvía todos los problemas del desarrollo web, pero era simple, rápido y directo al punto.
Básicamente, usted desarrolló su propio marco en el transcurso de meses o años, adaptado a sus propias necesidades, y podría trabajar muy rápido con él porque lo conocía íntimamente.
Y, sin embargo, no puede comprender por qué los demás hacen lo mismo y luego tratan de convertir el resultado en algo que todos puedan usar.
¿Dónde está este gran marco que has desarrollado? Si es tan poderoso y fácil de usar, ¿dónde están las comunidades dedicadas, miles de usuarios y cientos de sitios desarrollados con ella?
cada proyecto utiliza un marco diferente incluso dentro de la misma empresa (al menos en mi caso)
Bueno, ese es tu problema allí mismo. ¿Por qué tirar la experiencia adquirida con cada marco después de cada proyecto?
La idea es elegir un marco y mantenerlo en múltiples proyectos para que pueda dominarlo. Tienes que invertir algo de tiempo para aprender el marco, y luego te ahorra tiempo al permitirte trabajar en un nivel superior.
Estoy tan cansado de tener que aprender otro framework web de Java cada dos días.
JSP, Struts, Wicket, JSF, JBoss Seam, Spring MVC, por nombrar solo algunos, todos estos innumerables marcos intentan abordar los mismos problemas. Sin embargo, ninguno de ellos realmente resuelve los problemas fundamentales, por eso aún surgen nuevos y más nuevos todo el tiempo.
La mayoría se ve muy brillante y brillante en la primera impresión porque simplifican hacer cosas simples.
Pero tan pronto como se trata de la implementación de un caso de uso en el mundo real, uno se encuentra con problemas.
A menudo, los marcos no proporcionan ninguna ayuda, pero están obstaculizando uno y limitando las opciones al obligar a que las cosas se implementen de acuerdo con la lógica y el entorno propios de los marcos.
En resumen, veo las siguientes desventajas cuando uso un marco:
- En su mayoría, hay una curva de aprendizaje empinada y primero debe comprender conceptos a veces bastante académicos y conocer el significado y la ubicación de un montón de archivos de configuración antes de poder comenzar.
- Por lo general, la documentación es más o menos horrible, ya sea que falte una referencia pública accesible en línea, que no se pueda actualizar, confunda diferentes versiones incompatibles o todo esto en conjunto y, a menudo, no proporciona ningún ejemplo útil.
- El marco consta de miles de millones de clases, lo que hace que sea prácticamente imposible entender el uso previsto solo mediante la exploración de las fuentes.
- Por lo tanto, es necesario que compre algún tipo de libro "XYZ en acción para dummies en 21 días" que tenga una mala interfaz de usuario porque les falta una búsqueda de texto completo y son muy pesados.
- Para utilizar realmente uno de estos marcos, debe aprender de memoria cómo se pueden hacer las cosas de la manera que el marco requiere, recordando las clases y los nombres de métodos adecuados hasta que su cabeza esté llena de información estúpida e inútil que no puede usar para nada más. .
- Hay una gran sobrecarga, ralentizando el rendimiento de las aplicaciones y haciendo que su cerebro se sienta adormecido cuando trata de entender lo que realmente está sucediendo.
- En el mundo real, generalmente no hay tiempo para familiarizarse con algo nuevo debido a la presión de ser productivo. Como consecuencia de este enfoque de aprendizaje mediante la realización, siempre se busca la forma más rápida de realizar la siguiente tarea en lugar de comprender realmente la nueva herramienta y sus posibilidades.
- El argumento de que seguir un estándar permitiría a las personas que son nuevas en un proyecto comenzar rápidamente no es válido en mi opinión porque cada proyecto utiliza un marco diferente incluso dentro de la misma compañía (al menos en mi caso).
Me parece que la siguiente cita de Albert Einstein encaja muy bien aquí:
"No podemos resolver problemas usando el mismo tipo de pensamiento que usamos cuando los creamos".
En mis viejos tiempos de codificación PHP, cuando la codificación aún era divertida y productiva, solía escribir mis propios marcos para la mayoría de las cosas y simplemente copiarlos y pegarlos de un proyecto a otro.
Este enfoque se pagó muy bien, lo que dio como resultado un desarrollo rápido, sin gastos generales y un marco que en realidad era más poderoso que la mayoría de los marcos de Java, pero con solo unos pocos cientos de líneas de código en un solo archivo más algunas reglas simples de mod_rewrite.
Esto ciertamente no resolvía todos los problemas del desarrollo web, pero era simple, rápido y directo al punto.
Aunque se ajustó perfectamente a los requisitos del proyecto actual, también era fácil de expandir y tenía un rendimiento muy alto debido a la sobrecarga de cero.
Entonces, ¿por qué todo lo que se complica con el uso de estos marcos, por qué no tirarlos y volver a las raíces?
¿Qué debería decirle a mi jefe cuando comencemos mañana el próximo proyecto con un nuevo marco nuevamente?
¿O hay tal vez marcos que realmente hacen una diferencia?
¿O algunas ventajas ocultas que he ignorado?
Aquí hay una cita de Kev del hilo. ¿Cuál es su opinión de programación más controvertida? que encaja aquí muy bien:
Creo que todo el marco de los "Enterprise" es humo y espejos. J2EE, .NET, la mayoría de los marcos de Apache y la mayoría de las abstracciones para administrar tales cosas crean mucha más complejidad de la que resuelven.
Tome cualquier Java o .NET OMR normal, o cualquier marco MVC supuestamente moderno para cualquiera que haga "magia" para resolver tareas tediosas y simples. Terminas escribiendo enormes cantidades de feos XML que son difíciles de validar y escribir rápidamente. Tiene API masivas donde la mitad de ellas son solo para integrar el trabajo de las otras API, interfaces que son imposibles de reciclar y clases abstractas que son necesarias solo para superar la inflexibilidad de Java y C #. Simplemente no necesitamos la mayor parte de eso.
¿Qué tal todos los diferentes servidores de aplicaciones con su propia sintaxis de descriptor, la base de datos demasiado compleja y los productos de groupware?
El punto de esto no es esa complejidad == mala, es esa complejidad innecesaria == mala. He trabajado en instalaciones empresariales masivas donde algunas de ellas eran necesarias, pero incluso en la mayoría de los casos, todo lo que se necesita para resolver la mayoría de los casos de uso es una serie de scripts locales y una sencilla interfaz web.
Intentaría reemplazar todas estas aplicaciones empresariales con marcos web simples, bases de datos de código abierto y construcciones de programación triviales.
Bueno, ¿no está haciendo lo mismo todos los días un poco aburrido ...?
Comparto tu dolor cuando te enfrentas a otro marco que no funciona.
Habiendo sobrevivido diez años de jsp, struts, EJB, EJB2, struts2, jsf y ahora más recientemente todos los nuevos marcos de servicios web, los horrores xslt y wsdl-first pesadillas, definitivamente estoy harto.
Hay una serie de problemas con los marcos. Se leak lo que tiene que aprender más, no menos, los marcos internos tienen costos enormes, también usan los costos de los marcos externos (pero mucho menos), ya que rara vez se entregan, y luego terminan escribiendo fragmentos de enourmus de configuración xml y pasan días corrigiendo errores de ortografía y de caja que había visto de inmediato en su contenido favorito ayudando al editor de código.
Tal vez la respuesta sea encontrar kits de herramientas menos pomposos que intenten resolver un problema pero no redefinir el mundo, pero eso también es difícil ya que el modelo de aplicación fundamental (html sobre http) es incómodo, en el mejor de los casos.
Agregue el hecho de que parece haber una gran cantidad de complicators , gente que parece estar obsesionada con el intercambio de problemas simples y aburridos por problemas complejos (pero difíciles) de interresting (tal vez una variante del Axioma de Desarrollo de Software de Eric Sink mencionado anteriormente).
Agregue la arrogancia de los desarrolladores que lo saben todo y no dude en escribir un nuevo marco para resolver todos los problemas difíciles para usted, solo que no pueden, dejando un 10% restante, solo que es mucho más difícil de solucionar ahora.
No tengo experiencia con .NET, pero el mundo .NET parece estar menos lleno de teóricos y complicadores, y tal vez el hedor persistente de VB los está asustando, pero cada vez que escucho a alguien me dice que han pasado 1500 horas con su perra. config (hola?), estoy considerando seriamente eliminar "java" de mi currículum.
... ¿Cuál fue la pregunta de nuevo? ¿Hay marcos que hagan la diferencia?
EDITAR - Stripes agregados y QueryDSL.
Probaría Stripes o GWT con QueryDSL + Hibernate o OpenJPA (con anotaciones) solo por el hecho de que realmente se desarrolla en Java, y trataré de limitar el uso de wsdl-first web services, frameworks xml centric, EJB y ESBs ( No la cerveza) tanto como sea posible.
Considere el punto contrario. Estoy trabajando en una tienda en este momento que no utiliza ningún marco más allá del estándar JSP. Cada persona tiene una forma diferente de hacer las cosas y estamos muy relajados acerca de conceptos como desacoplamiento y problemas de seguridad como la validación.
Si bien no creo que el uso de marcos automáticamente lo convierta en un mejor programador, sí creo que al usar un patrón de diseño estándar implementado por la mayoría de los marcos y al tener fácil acceso a funciones de utilidad como la validación, creo que es probable que vaya a ser obligados a codificar hasta un cierto estándar.
En el diseño de aplicaciones web, no inventa la rueda cada vez, por lo que termina terminando con su propia solución para tareas comunes o utilizando un marco. Supongo que al usar un marco de uso común en lugar de rodar el suyo, obtendrá un código subyacente que está bien probado y es flexible.
No hay nada de malo en hacer rodar su propia solución como actividad académica, pero acepto que hay personas que dedican mucho más tiempo a una solución robusta, de lo que puedo pasar. Tome log4j, por ejemplo, es bastante fácil rodar su registrador, pero log4j está bien probado y mantenido, y se han tomado el tiempo para mejorar la flexibilidad y el rendimiento hasta el punto que la mayoría de los registradores no pueden tocar. El resultado final es un marco que es robusto pero también lo suficientemente simple como para usarlo incluso en las aplicaciones más básicas.
El problema con crear su propio marco es que cometerá todos los mismos errores que todos los marcos establecidos ya han encontrado y abordado. Esto es cierto especialmente cuando se trata de seguridad.
Solo pregúntele a Jeff y los chicos sobre lo que tenían que considerar al implementar el WMD en el desbordamiento de pila. Prefiero usar lo que han producido en un proyecto en lugar de implementarlo desde cero. Eso es solo un ejemplo.
El problema es, por supuesto, no solo con los marcos de Java. He perdido la cuenta de la cantidad de proyectos de C ++ MFC que he visto al tratar de adaptar sus requisitos al modelo Documento / Vista (que en realidad solo funciona para editores de texto y gráficos; las aplicaciones de bases de datos son particularmente difíciles de identificar). .
El secreto del uso exitoso del marco es cambiar su aplicación para que coincida con el marco, no al revés. Si no puede hacer eso, ni siquiera piense en usar el marco: terminará siendo más trabajo que si hubiera escrito la aplicación desde cero con la ayuda de algunas bibliotecas de utilidades buenas, confiables y bien documentadas.
Entonces, ¿crees que es mejor si todos inventamos la rueda en cada proyecto?
Es posible que vea un exceso de marcos como un problema, y hace que sea más difícil elegir su propio conjunto. Pero por otro lado, no tienes que probar cada uno; E incluso si lo haces, terminarás prefiriendo algunos de ellos. Tendrá un marco favorito para ORM, otro para desarrollo web, IoC, etc.
Ayuda a leer en algunos foros para conocer cuáles son los más populares; deben ser populares por una razón, e incluso si no es la razón correcta (como ser técnicamente superior, tal vez es popular entre los gerentes debido a la sobrecarga de palabras de moda o lo que sea), el conocimiento de dicho marco será útil porque podrá Participa en varios proyectos que lo utilizan.
Además, usar un marco en lugar de escribir el tuyo te ahorrará muchos problemas. Los errores no siempre son encontrados y resueltos por los autores; Eso es a menudo hecho por los usuarios del marco. Usted dijo que terminó con su propio marco privado en PHP; Apuesto a que no estaba libre de errores, pero tal vez no lo sabías porque eras el único usuario y el único programador.
Entonces, ¿está diciendo que deberíamos operar con sockets y HTTP cada vez que queremos construir una aplicación web?
El propio contenedor de servlets puede considerarse un marco, ya que maneja todos estos detalles desordenados, y le permite escribir Servlets / Filters / Listeners mucho más simples (es decir, ''extensiones'' del marco específico para su aplicación).
Todo lo que cualquier marco intenta hacer es separar el código legwork mundano, repetible y propenso a errores del código divertido específico de la aplicación.
Sin embargo, para una aplicación pequeña, puede salirse con la simple idea de tener un enfoque de Modelo 2 MVC que solo utiliza JSP y Servlets.
Ejemplo:
class MyController extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ... {
MyBean model = // do something
request.setAttribute("model", model);
request.getRequestDispatcher("/view.jsp").forward(request, response);
}
}
Luego, a medida que su aplicación se vuelve más sofisticada, podría considerar el uso de Spring MVC para proporcionar un acoplamiento más flexible (y, por lo tanto, más flexible) de controladores, visualizadores de resolución, etc.
Lo que funcionó para mí es: no solo debes aprender cualquier marco web que escuches, echarle un vistazo, ver si te hace codificar cómodamente, preguntar por o foros para ver sus ventajas y desventajas, luego aprenderlo y aprender. Es bueno y solo quédate con él hasta que sientas que está roto o desactualizado. Cualquiera de los sitios web sobre los que escribiste es bueno por sí mismo y es divertido trabajar si "REALMENTE" sabes lo que hace. Si no lo haces, simplemente estás vagando en un desierto sin brújula. También encontré que el libro de 21 días es una forma segura para que NO domines un marco o una tecnología. Docs es seguramente algo a considerar mientras adopta af / w. También ayuda si revisa el código usted mismo (en realidad, esto es lo que me ayuda mejor cuando me enfrento a un comportamiento que me parece extraño.
1-Entonces, ¿por qué toda esa molestia con el uso de estos marcos, por qué no tirarlos y volver a las raíces?
si regresa a las raíces, reescribe el código que hace lo mismo una y otra vez + la mayoría de estos f / ws de código abierto significa que probablemente estén mejor con el mantenimiento de lo que haría solo con su propio f / w.
2-¿Qué debería decirle a mi jefe cuando empecemos mañana el próximo proyecto con un nuevo marco nuevamente?
esta es la primera vez que trabajo con este f / w No veo por qué deberíamos usar este f / w Ya sé X y soy muy bueno en eso. teniendo en cuenta el costo de que yo aprenda este f / w, el costo de retrabajo que se debe hacer debido a mi ignorancia de tal af / w. Creo que estamos mejor usando X, si este es un requisito específico, deberíamos luchar por ello y solo hacerlo si realmente tenemos que indicar las notas anteriores.
¿O hay tal vez marcos que realmente hacen una diferencia?
solo aquellos que abordan la forma en que usted piensa, no la forma en que escribe el código (piense que los puntales en su época dorada aplican el patrón MVC)
¿O algunas ventajas ocultas que he ignorado?
no puedo pensar en ningún tbh.
Sin embargo, no estoy de acuerdo con algunos puntos que ha mencionado, pero estoy de acuerdo con usted en relación con el trabajo aburrido.
Sí, todas las aplicaciones web tratan sobre páginas que muestran formularios, recopilan datos, realizan validaciones, envían datos para su almacenamiento en la base de datos y filtran los datos almacenados por formularios de búsqueda y muestran el resultado en tablas y seleccionan uno o más registros para la manipulación (CRUD, o acciones de negocios que se trata de cambiar el estado de la base de datos
Sin embargo, estoy trabajando solo por 4 años más, por supuesto, mis 4 años de estudio académico. Creo que este tipo de desarrollo es aburrido, ya que no está inventando algoritmos. Por supuesto, se alegró al descubrir un nuevo marco y estará más contento si integró uno de los motores de inteligencia artificial en su aplicación, pero al final siento que este trabajo Es un maniquí que funciona, o digamos que la máquina funciona, entonces, ¿por qué no automatizamos todo esto?
sí, otro marco;) MDA Model Driven Architecture, en resumen trata sobre la transformación de PIM (Platform Independent Model) a PSM (Platform Specific Model), es decir, de UML a Code.
Y esto puede resolver el problema de la curva de aprendizaje y los cambios tecnológicos, ya que solo tendrá que ser bueno para modelar, ya que hay algunos marcos que implementan las especificaciones de MDA como AndroMDA, ya que tiene cartuchos que llevan los Diagramas de clase, casos de uso, secuencia Diagramas, y Diagramas de actividad y generar secuencias de comandos de creación de base de datos, POJO, mapeo de hibernación, Spring / EJB, JSF / Struts, código .NET.
Por supuesto, dichos marcos no generarán el 100% del código, sino que generarán un gran porcentaje, y, por supuesto, se preguntará dónde resolverá este marco complejo y difícil escenarios de requisitos. Hoy diré que no, mañana sí.
Entonces, ¿por qué tú y yo no invertimos en el desarrollo de este gran marco?
Tiene el mismo problema en PHP: más marcos de los que tiene dedos para contar, cada uno de los cuales es el mejor y el mejor (aunque tiene algunos consejos: diseño PHP5 puro vs. compatibilidad PHP4, filosofía Rails (jerarquía de carpetas inflexibles, generada automáticamente código) vs. enfoque de biblioteca ...) ¡y pasas más tiempo buscando y explorando las posibilidades que escribiendo tu código!
Pero en PHP permite resolver problemas comunes, como la compatibilidad con I18N, la integración de complementos, la gestión de sesiones y la autenticación, la abstracción de la base de datos, las plantillas, la compatibilidad con Ajax, etc. Evitar reinventar la rueda en cada proyecto y caer. En trampas comunes para novatos.
Por supuesto, también hay algunos consejos para los marcos de Java: ¿grandes o pequeños? bien documentado o no? ampliamente utilizado o confidencial? para los fans de XML o no? Etc.
Supongo que la mayoría de los marcos apuntan a proyectos grandes, donde el tiempo de aprendizaje no es un gran problema, la escalabilidad y la facilidad de implementación son importantes, etc. Probablemente sean excesivas para proyectos pequeños.
También hay una tendencia en dichos marcos para apuntar a hacer un conjunto consistente de bibliotecas de acoplamiento flexible en lugar de un marco monolítico. Ese es el caso, en el mundo de PHP, para el framework Zend (algunos incluso niegan el uso de la palabra ''framework'' ...).
Así que resuelve el problema de "resolver problemas comunes" sin estorbar.
Una vez tuve que trabajar en un proyecto tratando de implementarlo en JSF. Fue una pesadilla.
La mayor parte del tiempo de trabajo se dedicaba a compilar cosas. El hecho de que no menos de la mitad de lo que se compiló no funcionó fue otra historia. Casi no hay tutoriales. La documentación es básicamente una exportación de código fuente automatizada sin comentarios humanos. ¿Cómo se puede esperar que funcione así?
De varios marcos que habíamos visto, solo Sun pudo crear un nuevo proyecto que es compilable en absoluto. El otro solo pudo producir un montón de cosas que tardaron muchos días en llegar a un estado compilable.
La web estaba casi en silencio. Para cualquier búsqueda allí, no hay más de 20 páginas de resultados de búsqueda, con primeros 1-3 útiles. En lo relevante que se encontró, la mitad de la gente estaba pidiendo ayuda, la otra mitad declaró que había pedido ayuda, nadie vino, perdió tiempo e interés y abandonó esa tecnología.
Así que pasamos momentos y solo hicimos algo simple que podría haberse hecho en unas pocas semanas con ASP.NET, por ejemplo.
Luego nos fijamos en marcos JSF alternativos. Para nuestra sorpresa los encontramos a todos bastante incompatibles.
Sin ninguna sorpresa, nos unimos a las filas de aquellos que también abandonaron JSF.