为MongoDB开发Hibernate/Mysql或为Java/Spring/Tomcat web应用程序开发Coach
我有一个正在经历大规模返工的应用程序,我一直在探索不同的选择——按原样进行,在不同的框架或平台中重做项目,等等 当我认真思考时,以下是我非常不喜欢java的三个主要方面:为MongoDB开发Hibernate/Mysql或为Java/Spring/Tomcat web应用程序开发Coach,java,spring,mongodb,hibernate,nosql,Java,Spring,Mongodb,Hibernate,Nosql,我有一个正在经历大规模返工的应用程序,我一直在探索不同的选择——按原样进行,在不同的框架或平台中重做项目,等等 当我认真思考时,以下是我非常不喜欢java的三个主要方面: 修改控制器或其他类时服务器启动/停止。在这里,动态语言是对Java的巨大胜利 Hibernate、Lazyloading异常(特别是在异步服务调用或Jackson JSON编组期间发生的异常)和ORM膨胀。Hibernate本身负责缓慢的集成启动时间和极其缓慢的应用程序启动时间 Java愚蠢-与Tomcat相比,在IDE中运行
谢谢嗯,这在很大程度上取决于“Hibernate的痛点到底是什么?”(我知道,你举了三个例子……) 但从长远来看,这些并不是核心问题。您遇到的是编译语言与动态语言的本质;在运行时,它更适合您(根据我不太详尽的测试,Java比动态语言更快、更具可伸缩性),但在开发时,它不太适合只把垃圾放在一起,希望它能工作 NoSQL不会解决问题,尽管文档存储可以,但您必须经历一个迁移步骤 重要提示:我在该领域为一家供应商工作,这解释了我在该领域的经验,以及下一段中的偏见:
我想,您正在关注开源项目,尽管我建议您使用一种商业产品:GigaSpaces(http://gigaspaces.com). 有一个社区版,允许您将基于JPA的java对象迁移到文档模型(通过SpaceDynamicProperties注释);您可以将JPA用于您编写的代码,并在方便的时候慢慢迁移到完全面向文档的模型,再加上复杂的查询,这不是问题。无论如何,您的rant不仅涵盖了以前为Hibernate做出的(遗留)决策的问题,而且还涵盖了作为程序员的一般开发问题 如果一个类似的项目落在我的膝上,急需重构或改进,我会这样做 这取决于你的软件生命周期中的阶段,以及你应该做出大的改变还是坚持做小的改变所涉及的时间压力。然而,从长远来看,增量迁移似乎是最好的选择 短期内保持用Java编写应用程序似乎是明智的,用另一种语言进行重大重写肯定会破坏验收和集成测试 就像Joseph建议的那样,从Hibernate到JPA。这不应该花费太多时间。从那里,您可以将后端切换到其他存储方式。朝着分离关注点的方向努力。选择最合适的概念,一些人更喜欢MVC,而其他人可能选择CQR,还有一些人喜欢另一种分割/分离风格 由于JVM支持多种语言,因此您始终可以切换到其中任何一种语言,或者至少部分地用更动态的语言实现功能。这将在一定程度上解决您不断碰到Java的“愚蠢”的问题,同时仍然保留当前JVM在运行时的出色优化 此外,您可能希望设置自动集成测试。。。由于应用程序可能永远不会从IDE运行,因此这些测试将为您提供真实的结果 旁注:如果IDE能够将自己的库注入到我的构建或运行时路径中,我从不相信我的IDE能够正确地获得依赖项
因此,简单地回顾一下:小步骤;失去冬眠,对JPA更抽象;如果Java变得愚蠢,那么就逐渐转向一种聪明的语言。您主要关心的应该是在不丢失功能的情况下重新构造代码库,记住采用开放式设计,这将使以后更容易添加有趣和酷的功能。所有这些问题通常都是由于不称职而导致的问题,而不是hibernate或java出现问题:
- 除了结构修改(添加字段或方法)之外,java代码中的所有更改都是在调试模式下热交换的,因此您可以保存和测试(无需任何重新部署)
仅适用于hibernate初学者。有许多明确的解决方案,你可以通过简单的谷歌搜索找到它们LazyInitializationException