Web应用程序-通过不使用Java Web框架来改善生活?

我非常厌倦每隔一天必须学习另一个Java Web框架。
JSP,Struts,Wicket,JSF,JBoss Seam,Spring MVC仅举几例-所有这些无数的框架都试图解决相同的问题。 但是,它们都不能真正解决根本问题-这就是为什么一直有越来越多的新问题出现的原因。

大多数产品在第一印象中确实看起来非常明亮有光泽,因为它们简化了简单的事情。
但是,一旦涉及到实际用例的实现,就会遇到问题。
框架通常不提供任何帮助,但会通过根据框架自身的逻辑和环境强制执行某些事情来阻碍或限制选择。

简而言之,在使用框架时,我看到以下缺点:

  1. 通常情况下,学习曲线比较陡峭,您首先需要了解有时非常学术的概念,并了解一堆配置文件的含义和位置,然后才能开始使用。
  2. 该文档通常或多或少糟糕,要么缺少公共可访问的在线参考,要么无可救药的过时,混淆了不同的不兼容版本,或者将所有这些融合在一起,并且通常不提供任何有用的示例。
  3. 该框架由成千上万的类组成,这使得实际上仅通过浏览源代码就无法理解其预期用途。
  4. 因此,您需要购买一些“ XYZ在21天以内的虚拟傻瓜”书,这些书的用户界面不好,因为它们缺少全文搜索并且携带困难。
  5. 要真正使用该框架之一,您需要记住适当的类和方法名称,直到头脑中充满了愚蠢和无用的信息,您才能用心学习如何按照框架要求的方式完成事情 。
  6. 当您试图了解实际情况时,这会产生很大的开销,从而降低您的应用程序性能并使您的大脑麻木。
  7. 在现实世界中,由于生产力的压力,通常没有时间熟悉新事物。 通过边做边学的结果,人们总是只寻找完成下一个任务的最快方法,而不是真正地了解新工具及其可能性。
  8. 在我看来,遵循标准将允许刚接触项目的人员快速入门的论点是无效的,因为即使在同一家公司内,每个项目都使用不同的框架(至少在我的情况下)。

在我看来,以下来自爱因斯坦的名言非常适合:

“我们无法通过使用与创建问题时相同的思维来解决问题。”

回顾我以前的PHP编码时代,那时的编码仍然很有趣且富有成效,我过去常常为大多数事情编写自己的框架,只是复制粘贴并将它们从一个项目移植到下一个项目。
这种方法的回报非常好,从而导致了快速的开发,完全没有开销,并且该框架实际上比大多数Java框架强大,但是在单个文件中只有几百行代码以及一些简单的mod_rewrite规则。
当然,这并不能解决Web开发的所有问题,但它简单,快速且直接。
在完全适应当前项目的要求的同时,由于零开销,它也易于扩展并且具有很高的性能。

那么,为什么要在使用此框架时遇到所有麻烦,为什么不将它们全部扔掉并回到根源呢?
当我们明天又开始使用新框架的下一个项目时,我应该对老板说些什么?
还是可能有真正发挥作用的框架?
还是我忽略的一些隐藏优势?

dankoliver asked 2020-06-29T20:27:04Z
13个解决方案
35 votes

回顾我过去的PHP编写历史 当编码仍然很有趣并且 富有成效,我过去常常写自己的 大多数事物的框架 复制粘贴并采用其中的一个 项目到下一个。 这种方法 支付得很好,导致快速 开发,完全没有开销,并且 实际上更强大的框架 比大多数Java框架

原谅我相信不是一秒钟。

但是只有几百行 单个文件中的代码加上一些简单的代码 mod_rewrite规则。 这当然 并不能解决网络的所有问题 开发,但它简单,快速 直截了当。

因此,基本上,您可以在几个月或几年的时间内开发出自己的框架,并根据自己的需求量身定制,并且可以很快地使用它,因为您非常了解它。

但是您不明白为什么其他人也会这样做,然后尝试将结果变成每个人都可以使用的东西?

您开发的出色框架在哪里? 如果功能如此强大且易于使用,那么专用社区,成千上万的用户和数百个站点在哪里开发?

每个项目使用不同的 甚至在同一公司内的框架 (至少就我而言)

好吧,那是您的问题所在。 您为什么要在每个项目之后放弃在每个框架中获得的专业知识?

这个想法是选择一个框架并在多个项目中坚持使用,以便您精通它。 您必须花一些时间来学习框架,然后通过允许您在更高层次上进行工作来节省时间。

Michael Borgwardt answered 2020-06-29T20:27:50Z
20 votes

提出自己的框架的问题是,您将犯所有已经建立并解决的已建立框架的所有相同错误。 特别是在安全性方面。

只需询问Jeff和其他人有关在堆栈溢出中实现WMD时必须考虑的事项。 我宁愿使用他们在项目中产生的内容,也不愿从头开始实施它。 那只是一个例子。

Martin OConnor answered 2020-06-29T20:28:15Z
12 votes

这是来自Kevin的引文。您最有争议的编程观点是什么? 非常适合这里:

我认为整个“企业”框架都是烟和镜子。 J2EE,.NET,大多数Apache框架和大多数用于管理此类事物的抽象所带来的复杂性远超过其解决的复杂性。

采取任何常规的Java或.NET OMR或任何所谓的现代MVC框架,只要它们能“神奇”地解决繁琐而简单的任务即可。 您最终要编写大量难以验证和快速编写的难看的XML样板。 您拥有大量的API,其中一半仅用于集成其他API的工作,无法回收的接口以及仅用于克服Java和C#的灵活性的抽象类。 我们根本不需要大部分。

具有自己简明的描述符语法的所有不同应用程序服务器,过于复杂的数据库和群件产品又如何呢?

这样做的意义不是复杂性==坏,而是不必要的复杂性==坏。 我曾在大型企业安装中工作过,其中某些安装是必需的,但即使在大多数情况下,也需要一些本地编写的脚本和简单的Web前端来解决大多数用例。

我将尝试用简单的Web框架,开源数据库和琐碎的编程结构替换所有这些企业应用程序。

dankoliver answered 2020-06-29T20:28:58Z
11 votes

当然,问题不仅仅在于Java框架。 我已经数不清C ++ MFC项目的数量了,而我曾尝试将它们的要求塞入Document / View模型(实际上仅适用于文本和图形编辑器-数据库应用程序很难塞入)难以为继 。

成功使用框架的秘诀是更改应用程序以匹配框架,而不是相反。 如果您无法做到这一点,那么甚至不要考虑使用该框架-与使用一些良好,可靠且文档齐全的实用程序库从头开始编写该应用程序相比,它最终将承担更多的工作。

answered 2020-06-29T20:29:24Z
9 votes

那么,您是说我们每次要构建Web应用程序时都应该处理套接字和HTTP!

Servlet容器本身可以被认为是一个框架,因为它可以处理所有这些混乱的细节,并让您编写更简单的Servlets / Filters / Listeners(即:特定于应用程序的框架的“扩展”)。

所有框架尝试做的都是将普通的,可重复的,易出错的,正常的代码与有趣的应用程序专用代码分开。

但是,对于小型应用程序,只需使用仅使用JSP和Servlet的Model 2 MVC方法就可以摆脱困境。

例:

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);
    }
}

然后,随着您的应用程序变得越来越复杂,您可以考虑使用Spring MVC提供松散的耦合(因此更加灵活)的控制器,视图解析器等。

toolkit answered 2020-06-29T20:30:06Z
7 votes

当您遇到另一个无法解决问题的框架时,我会与您分享痛苦。

在经历了10年的jsp,struts,EJB,EJB2,struts2,jsf以及最近所有新的Web服务框架,Xslt恐怖以及wsdl的噩梦之后,我肯定感到受够了。

框架存在许多问题。 它们会泄漏,因此您必须了解更多信息-不少,内部框架的成本很高,使用外部框架的成本也很高(但少得多),因为它们很少交付,然后最终编写大量的xml配置文件,并花费数天的时间进行纠正 在最喜欢的内容帮助代码编辑器中立即看到的大小写和拼写错误。

也许答案是找到一些不太麻烦的工具箱来尝试解决问题,而不是重新定义世界,但这也很难,因为基本的应用程序模型(基于HTML的HTML)很笨拙-充其量也是如此。

再加上一个事实,那就是周围似乎有很多麻烦的人,似乎痴迷于将无聊的简单问题转换为复杂(但困难)的问题(也许是上述Eric Sink的软件开发公理的一种变体)。

加上知道一切的开发人员的狂妄自大,他们毫不犹豫地编写了一个新的框架来为您解决所有困难的问题,只剩下他们不能做,只剩下10%,现在就更难解决了。

我没有.NET经验,但是.NET世界似乎并不那么拥挤,没有理论家和复杂论者,也许VB挥之不去的臭味使他们望而却步,但是每次我听到有人告诉我他们已经花了1500个小时在行家中时 config(您好?),我正在认真考虑从简历中删除“ java”。

...又是什么问题? 有没有可以发挥作用的框架?

编辑-添加了Stripes和QueryDSL。

我会尝试使用QueryDSL + Hibernate或OpenJPA(带有批注)来使用Stripes或GWT,只是为了您实际上是用Java开发的,并尝试限制使用wsdl-first网络服务,以XML为中心的框架,EJB和ESB( 而不是啤酒)。

KarlP answered 2020-06-29T20:31:07Z
3 votes

好吧,不是每天都一样无聊吗?

Arjan answered 2020-06-29T20:31:27Z
3 votes

我曾经不得不从事一个试图在JSF中实现它的项目。 那是一场噩梦。

大部分工作时间都花在使事情编译上。 另一个事实是,不少于一半的编译不起作用。 几乎没有教程。 文档基本上是一种自动化的源代码导出,无需人工注释。 怎样才能像这样工作?

在几个框架中,我们只能看到Sun能够创建一个完全可编译的新项目! 另一个只能产生一堆东西,这些东西花了很多天才响到可编译状态。

网络几乎是寂静的。 对于任何搜索,我们都不会超过20页的搜索结果,其中有用的前1-3页。 在发现的相关信息中,一半的人在哭泣寻求帮助,另一半的人宣称他们在哭泣寻求帮助,没人来,他们失去了时间和兴趣,放弃了这项技术。

因此,我们花了很多时间,只做了一些简单的事情,例如使用ASP.NET可以在几周内完成。

然后,我们研究了替代的JSF框架。 令我们惊讶的是,我们发现它们都不兼容。

毫不奇怪,我们也加入了放弃JSF的行列。

User answered 2020-06-29T20:32:14Z
3 votes

考虑对策。 我现在正在一家商店工作,该商店不使用JSP标准以外的任何框架。 每个人的处事方式都不同,我们对解耦之类的概念以及诸如验证之类的安全性问题非常松懈。

虽然我认为使用框架不会自动使您成为更好的编码人员,但我确实认为通过使用大多数框架实现的标准设计模式并易于访问验证等实用程序功能,我认为您很有可能会 被迫编码达到一定标准。

在Web应用程序设计中,您并不会每次都花时间,因此最终要么将自己的解决方案推广到常见任务,要么使用框架。 我假设使用一个常用的框架而不是自己滚动框架,您将获得经过良好测试和灵活的基础代码。

将您自己的解决方案作为学术追求并没有错,但是我接受那里的人花了更多的时间来制定可靠的解决方案,这样我才有可能花钱。 以log4j为例,滚动记录器非常容易,但是log4j经过了良好的测试和维护,他们花了一些时间将灵活性和性能提高到大多数滚动记录器都无法触及的程度。 最终结果是一个既健壮又足够简单的框架,即使在最基本的应用程序中也可以使用。

James McMahon answered 2020-06-29T20:32:49Z
2 votes

对我有用的是:您不应该只是学习任何听说过的Web框架,看看它,看看它是否可以使您舒适地进行编码,请在stackoverflow或论坛附近询问其优缺点,然后学习并学习 很好,只要坚持下去,直到感觉不到它的破损或过时。 如果您“真正”知道它的功能,那么您撰写的任何Webframeworks本身就是一件好事,并且很有趣。 如果您不这样做,那么您只是在没有指南针的沙漠中徘徊! 我还发现这21天的书是您不掌握框架或技术的肯定方法。 在采用f / w时,肯定会考虑使用Docs,这对您自己查看代码也很有帮助(实际上,当我遇到一些奇怪的行为时,这对我有最大的帮助。

1-那么,为什么要麻烦使用该框架,为什么不将它们全部扔掉并回到根源呢?

如果您回到根源,那么一次又一次地重写代码,重复执行相同的操作+这些f / ws中的大多数都是开源的,这意味着与单独维护自己的f / w相比,它们在维护方面可能更好。

2-当我们明天又开始使用新框架的下一个项目时,我应该对老板说些什么?

这是我第一次使用此f / w,我不知道为什么要使用我已经知道X的f / w,我真的很擅长。 我几乎不了解我学习此f / w的成本,由于我对这样的f / w的无知而不得不进行返工的成本。 我认为我们最好使用X,如果这是一个特殊要求,我们应该为此奋斗,并且只有在确实必须说明前面的说明时才这样做。

还是可能有真正发挥作用的框架?

仅那些以您认为的方式解决问题的人,而不是您编写代码的方法的人(想想在执行MVC模式的黄金时代就str之以鼻)。

还是我忽略的一些隐藏优势?

想不到任何TBH。

MahdeTo answered 2020-06-29T20:33:47Z
1 votes

您在PHP中遇到了同样的问题:框架多于指望,每个框架都是最好的和最大的(尽管您有一些提示:纯PHP5设计与PHP4兼容性,Rails原理(不灵活的文件夹层次结构,自动生成) 代码)与库方法...),与编写代码相比,您花费更多的时间搜索和探索各种可能性!
但是在PHP中,它可以预先解决常见问题,例如I18N支持,插件集成,会话和身份验证管理,数据库抽象,模板,Ajax支持等。 在新手常见的陷阱中。

当然,Java框架也有一些提示:大还是小? 有据可查吗? 广泛使用还是保密? 是否适合XML爱好者? 等等。
我想大多数框架都是针对大型项目的,这些项目的学习时间不是一个大问题,可伸缩性和易于部署很重要,等等。对于小型项目而言,它们可能是过大的。

在这样的框架中也存在着一种趋势,其目标是做一组一致的松耦合库而不是一个整体框架。 在PHP世界中,Zend框架就是这种情况(有些人甚至否认使用“框架”一词...)。
因此,它解决了“解决常见问题”的问题,而无碍。

PhiLho answered 2020-06-29T20:34:30Z
0 votes

因此,您认为最好在每个项目中都发明轮子吗?

您可能会认为过多的框架是一个问题,这确实使选择自己的框架变得更加困难。 但是另一方面,您不必尝试每个。 即使这样做,您最终还是会更喜欢其中一些。 您将有一个最喜欢的ORM框架,另一个是Web开发,IoC等框架。

在某些论坛上阅读以了解最受欢迎的论坛确实有帮助; 它们必须因某种原因而受欢迎,即使这不是正确的原因(例如在技术上优越,也许由于流行语过载或其他原因而在管理人员中也很受欢迎),了解该框架将很有帮助,因为您将能够 参与使用它的几个项目。

另外,使用框架而不是编写自己的框架可以为您节省很多问题。 作者并不总是发现并解决错误。 这通常是由框架的用户完成的。 您说您最终使用了自己的PHP私有框架; 我敢打赌它不是没有错误,但是也许您不知道它,因为您是唯一的用户和唯一的编码人员。

Chochos answered 2020-06-29T20:35:05Z
0 votes

但是,我不同意您提到的某些观点,但我同意您的无聊工作。

是的,所有Web应用程序都是关于显示表单,收集数据,进行验证,发送数据以存储在数据库中以及通过搜索表单过滤存储的数据并将结果显示在表格中以及选择一个或多个记录进行处理(CRUD或 所有与更改数据库状态有关的业务操作。

但是我只工作4年,当然还有我4年的学术学习。我觉得这种类型的开发很无聊,因为您没有发明算法,当您发现新的框架时,您当然会感到高兴,并且如果将其中一个AI引擎集成到您的应用程序中会变得更快乐,但是最终,我觉得这项工作很有意义 是虚拟工作,还是说机器工作,那么为什么我们不自动化所有这些工作。

是的,另一个框架;)简而言之,MDA模型驱动的体系结构是关于从PIM(平台独立模型)到PSM(平台特定模型)的转换,即从UML到代码的转换。

这可能会解决您学习曲线和技术变化的问题,因为您只需要精通建模,因为有些框架实现了MDA规范,例如AndroMDA,因为它具有带类图,用例,序列的盒式磁带。 图和活动图,并生成数据库创建脚本,POJO,休眠映射,Spring / EJB,JSF / Struts,.NET代码。

当然,这样的框架不会生成100%的代码,但是会生成很大的代码,当然,您会问这个框架将解决复杂而棘手的需求方案吗? 今天我会说不,明天是。

所以为什么您和我不投资这个伟大的框架。

Ali Abdel-Aziz answered 2020-06-29T20:35:53Z
translate from https://stackoverflow.com:/questions/781191/making-life-better-by-not-using-java-web-frameworks