我使用原始PHP开始进行Web编程,逐渐转向各种框架,然后转到Django和Rails。在我使用的每个框架中,几乎所有我需要对数据库做的事情(甚至涉及相对复杂的事情,如多对多关系)都可以通过自动生成的数据库API来处理,而无需太多工作。那些更复杂的操作可以通过直接SQL或将多个API调用绑定在一起来完成。
现在我开始学习Java了,让我感到困惑的是,为后端基础设施提供强大的语言需要更多的代码(这并不意味着难以维护?)来做简单的事情。教程示例:假设您要按姓氏搜索。您使用Hibernate查询语言在DAO中编写方法,然后在服务中编写一个方法来调用它(不能自动化吗?),然后从控制器调用Service方法。在我使用的任何其他框架中,你可以调用某些东西来实现
的效果Person.find_by_last_name(request.POST['last_name'])
直接离开控制器 - 您不必编写任何自定义的东西来做类似的事情。
我还没有找到某种代码生成吗? Eclipse中的东西?对我而言,对于复杂后端的最佳选择之一而言,语言更加难以理解,这对我来说似乎并不合适。有什么我想念的吗?
答案 0 :(得分:4)
Grails获胜。 Groovy与Java非常相似,但有很多很好的动态语言添加/简化。 Grails有GORM,这正是你想要的。
答案 1 :(得分:4)
在您提到的示例中,看起来他们使用的分层架构比您习惯的更多。
Controller -> Service -> DAO
这提供了应用程序内的分离。这完全取决于应用程序的体系结构,而不是Java作为一种语言。从技术上讲,Java中没有任何内容可以阻止您在控制器中调用Hibernate查询。它只是不会构成好的设计。
要考虑的另一件事是“服务”可能类似于EJB,它可能具有事务管理的作用,因此可以在单个事务中包含对DAO / Hibernate的多个调用,这些调用将自动提交或回滚成功/例外。
但是,这一切都在您使用的架构/框架中,而不是Java作为语言。
答案 2 :(得分:1)
我建议您查看Java的Spring框架。
我没有亲自使用它,但我听说过它的好消息。根据我的理解,它提供了与Django和Rails相同的功能。
答案 3 :(得分:1)
我建议你使用Seam。它是一个非常好的控制器,不会强迫你拥有完全多层的ap。它与执行ORM的JPA(Java Persistence Api)完全集成。
功能
在编写网页时,您使用bean(普通的java对象)。
你可以写:
#{PersonHome.instance.name}
将评估一个人的姓名值。如果在request参数中有person id,它将被传递给PersonHome组件(如果它被正确注释),并且person bean将从db透明地加载。
你甚至可以写:
<h:commandLink action="#{PersonHome.delete(person}">
其中controllerBean是java bean,delete
接受person对象。它将被透明地转换为具有person id参数的链接,该参数将在触发action方法之前透明地转换为bean。
现在唯一需要注意的是,它在某种程度上限制了您对视图框架的选择:它仅适用于RichFaces,GWT以及我现在无法记住的其他内容;)。
PS。
是的,我是一个巨大的粉丝:)。
答案 4 :(得分:0)
获取Java iBatis。它不像Django的ORM那样强大(没有什么),但它比JDBC更重要。
答案 5 :(得分:0)
Grails看起来非常有趣。但是,我学习Java的主要原因是因为我希望至少能够使用我可以专业使用的东西。我不确定Grails是否适合这个法案,不过因为它是Java,也许企业会比Rails更热情。
Django是我曾经使用过的最美丽的代码,但它不受那些能够负担得起定制网络应用程序的企业的信任,这是我认为我想要进入的市场。
iBATIS看起来很有前途 - 通过JPetStore代码查看它看起来更自动一点。但所有SQL都必须手工编码吗?因为那时我会回到我开始的地方。
Spring有一个很好的,很容易使用界面层(MVC),它很好地将组件绑定在一起。虽然它可用于将ORM集成到应用程序中,但据我所知,它不是一个。
答案 6 :(得分:0)
您没有在Java中自动生成数据库API的部分原因是,作为一种没有宏的编译语言(如Lisp),它无法生成运行时代码。像Ruby这样的动态类型脚本语言具有这种能力。
另一个原因是文化:在过去十年中,J2EE世界倾向于偏好配置而不是传统。这种偏好的主要原因是企业应用程序经常需要处理许多狡猾的假设,这些假设会带来各种“奇怪”的边缘情况。就是这样。这些假设与像Rails这样的新框架所假设的形成鲜明对比。
那就是说,我认为没有什么可以阻止Java ORM API在编译时生成数据库API。我的猜测是Naked Objects更像是你的小巷。
答案 7 :(得分:0)
对我而言,对于复杂后端的最佳选择之一而言,这种语言已经变得更加难以理解。有什么我想念的吗?
原因是Java已在企业中部署的时间。
并不是说Java比Ruby更成熟,只是Java已经被使用了更长时间并且已经被厌恶风险的IT部门证明了。
因此,推荐的一种方法是通过JRuby(+ Rails),因为它运行在Java VM上,IT部门不需要安装或重新配置任何东西......