【问题标题】:How can I make Java back-end development faster? Or can I?如何让 Java 后端开发更快?或者我可以吗?
【发布时间】:2008-11-04 02:44:38
【问题描述】:

我开始使用原始 PHP 进行 Web 编程,逐渐转向其各种框架,然后转向 Django 和 Rails。在我使用的每个框架中,我需要对数据库执行的几乎所有操作(甚至涉及相对复杂的事情,例如多对多关系)都可以由自动生成的数据库 API 处理,而无需太多工作。那些更复杂的少数操作可以直接使用 SQL 或通过将多个 API 调用捆绑在一起来完成。

现在我开始学习 Java,令我感到困惑的是,这种语言以在后端基础设施方面如此健壮而著称,需要更多的代码(这不意味着更难维护吗?)来做简单的事情。教程中的示例:假设您想按姓氏搜索。您使用 Hibernate 查询语言在 DAO 中编写方法,然后在 Service 中编写一个方法来调用它(这不能自动化吗?),然后您从控制器调用 Service 方法。而在我使用过的任何其他框架中,你可以调用一些东西来实现

Person.find_by_last_name(request.POST['last_name'])

直接离开控制器 - 您无需编写任何自定义内容即可执行此类操作。

我还没有找到某种代码生成方式吗? Eclipse中的东西?在我看来,被重新评为复杂后端的最佳选择之一的语言很难使用。我有什么遗漏吗?

【问题讨论】:

  • 考虑软化“以如此强大而闻名的语言......”材料。有时,忽略抱怨并直接提出问题会有所帮助:“在我使用过的另一个框架中......”否则答案可能会演变成争论。

标签: java jakarta-ee


【解决方案1】:

Grails 赢得胜利。 Groovy 与 Java 非常相似,但有很多不错的动态语言添加/简化。 Grails 有 GORM,这正是您正在寻找的。​​p>

【讨论】:

    【解决方案2】:

    在您提到的示例中,看起来他们使用的分层架构比您习惯的要多。

    Controller -> Service -> DAO
    

    这提供了应用程序内的分离。这也完全取决于您的应用程序的体系结构,而不是真正的 Java 作为一种语言。从技术上讲,Java 中没有任何东西可以阻止您在控制器中调用 Hibernate 查询。它只是不构成好的设计。

    要考虑的另一件事是,“服务”可能类似于 EJB,它可能具有事务管理的作用,因此对 DAO/Hibernate 的多次调用可以包装在一个事务中,该事务将自动提交或成功/异常回滚。

    不过,这一切都在您使用的架构/框架中,而不是 Java 作为一种语言。

    【讨论】:

      【解决方案3】:

      我建议您查看 Java 的 Spring 框架。

      我没有亲自使用过它,但我听说过它的好消息。据我了解,它提供了与 Django 和 Rails 相同的功能。

      【讨论】:

        【解决方案4】:

        我建议您使用 Seam。它是一个非常好的控制器,不会强迫你拥有完全多层的应用程序。它与执行 ORM 的 JPA(Java Persistence Api)完全集成。

        特点

        1. 具有非常好的范围 - 您可以将对象范围限定为 Session、pageload、conversation(从用户的角度来看,conversation 是一个工作单元)。
        2. 不需要太多 XML。
        3. 不需要太多样板代码!
        4. 易于学习(您甚至可以从实体类或数据库模式生成框架项目;它仍然需要大量工作,但它至少会减少样板代码)
        5. 非常好的安全性(您可以使用基于角色的安全性,也可以使用规则框架)

        在编写网页时,您使用 bean(普通的 java 对象)。

        你可以写:

         #{PersonHome.instance.name} 
        

        这将评估一个人的名字的价值。如果在请求参数中有人员 id,它将被传递给 PersonH​​ome 组件(如果它被正确注释),并且人员 bean 将从数据库中透明地加载。

        你甚至可以写:

        <h:commandLink action="#{PersonHome.delete(person}">
        

        其中 controllerBean 是 java bean,delete 接受 person 对象。它将被透明地转换为具有 person id 参数的链接,在触发 action 方法之前将透明地转换为 bean。

        目前唯一需要注意的是,它在一定程度上限制了您对视图框架的选择:它仅适用于 RichFaces、GWT 以及我现在不记得的其他东西;)。

        PS。

        是的,我是接缝的忠实粉丝 :)。

        【讨论】:

          【解决方案5】:

          为 Java 获取 iBatis。它不像 Django 的 ORM 那样健壮(什么都不是),但它比 JDBC 迈出了一大步。

          【讨论】:

            【解决方案6】:

            嗯,是的,但我关心的不是分离。使用这些其他数据库 API,关注点是分开的 - 自定义数据库逻辑不是写在控制器中(我知道这是不好的形式),而是它是自动生成的。从控制器来看,调用看起来完全一样,不同之处在于,使用 Java/Hibernate 我必须自己编写它,而使用 Django/Rails/Symfony/Cake 它已经为我准备好了。

            Grails 看起来很有趣。不过,我学习 Java 的主要原因是因为我希望至少能够使用我可以专业使用的东西。我不确定 Grails 是否符合这个要求,但因为它是 Java,企业可能会比 Rails 更喜欢它。

            Django 是我用过的最漂亮的代码,但它不被那些能够负担得起定制 Web 应用程序的企业所信任,而这是我想进入的市场。

            iBATIS 看起来很有前途 - 查看 JPetStore 代码,它似乎更自动地执行了一些操作。但是所有这些 SQL 都必须手动编码吗?因为那样我就会回到我开始的地方。

            Spring 有一个很棒且相当容易使用的接口层 (MVC),它将组件很好地结合在一起。虽然它可以用于将 ORM 集成到应用程序中,但据我所知它不是一个。

            【讨论】:

            • 我应该指出,我目前在一家大型芯片制造公司的内部应用程序中使用 Grails。
            【解决方案7】:

            您没有在 Java 中获得自动生成的数据库 API 的部分原因是,作为一种没有宏的编译语言(如 Lisp),它无法进行运行时代码生成。像 Ruby 这样的动态类型脚本语言具有这种能力。

            另一个原因是文化:在过去十年中,J2EE 世界倾向于配置而不是约定。这种偏好的主要原因是企业应用程序通常必须处理许多粗鲁的假设,这些假设会带来各种“奇怪”的边缘情况。就是这样。这些假设与 Rails 等新框架的假设形成鲜明对比。

            也就是说,我认为没有什么可以阻止 Java ORM API 在编译时生成数据库 API。我的猜测是Naked Objects 更适合您。

            【讨论】:

              【解决方案8】:

              在我看来,重新分级为复杂后端的最佳选择之一的语言很难使用。我有什么遗漏吗?

              这是因为 Java 在企业中部署的时间太长了。

              并不是说 Java 比 Ruby 更成熟,只是 Java 的使用时间更长,并且已经被规避风险的 IT 部门证明。

              因此,一种推荐的方式是通过 JRuby (+Rails),因为它在 Java VM 上运行,IT 部门不需要安装或重新配置任何东西...

              【讨论】:

                猜你喜欢
                • 2013-10-30
                • 1970-01-01
                • 1970-01-01
                • 2017-11-06
                • 1970-01-01
                • 2019-04-28
                • 1970-01-01
                • 2011-11-03
                • 1970-01-01
                相关资源
                最近更新 更多