`
rainlife
  • 浏览: 233434 次
  • 性别: Icon_minigender_1
  • 来自: 我也来自火星?
社区版块
存档分类
最新评论

一次小项目的思考

    博客分类:
  • JAVA
阅读更多
最近的一个项目,四个开发人员,大概做了一个月多一点,从需求,到最终代码的完成。
写思考,我想,主要还是要回顾一下在项目中遇到的问题,或是有什么比较好的经验,新的体会值得记录下来,以供以后参考。在这里,主要是要思考两个方面的问题,数据库和测试。
1. 数据库
   对于数据库,在j道上面有这样一篇文章《数据库已死》,其主要思想,个人感觉,主要还是对象与关系的问题,我们现在的主流已经是面向对象,但现在,可能很多公司仍以数据库建模作为其一条主线,首先进行数据建模,erwin,powerdesigner,然后创建相应的表,下面,就使用myeclipse,hibernate tools等生成相应的实体类,以及相应的映射文件。包括以前的几个项目,者是在开始花了大量的时间进行数据库的设计,中途加入的项目,也会在进入项目组的开始阶段让你熟悉其数据库的表结构,当面对大量的表的时候,看着E-R图上面的“蜘蛛网”的时候,可能,就已经晕了。
实际上,在面向对象的时代,数据库只是状态持久化的一种手段,数据库的表结构完全可以通过Hibernate等ORM工具自动生成。
在这个小项目中,前期,并没有花大多的时候在数据库的设计上,在初期建模了一些核心对象,创建相应的实体类,加上相应的注解,借助于hibernate的hbm2ddl,完全可以由hibernate自动生成相应的表结构。当增加新的对象的时候,也只需要定义其类结构。
并且,可以提供不同的sessionfactory,分别针对测试等环境,也可以做到一定程度的database migration。
2. 测试
   TDD,BDD,持续集成~~~~等等,不知道有多少公司实施了,并且实施的情况如何。在以前的项目中,最怕的,就是测试数据依赖于其它的模块,当跑一次测试,还需要去跑一下由其它小组开发的模块,当对该模块的业务不太了解的时候,测试起来,还是比较麻烦的,还有可能需要麻烦其它小组的人员来为我们提供相应的测试数据。
这种情况,其中一个原因,测试代码太少。所以在这个项目中,针对一些核心的,或是较复杂的业务逻辑,都提供了相应的测试代码(当然,这里有一个粒度的问题),虽然在开发过程中,需要抽出一部分时间来编写相应的测试代码,但在实际过程中,效果还是比较明显的。
分享到:
评论
16 楼 logicgate 2009-08-21  
jdon我以前也去过不少次,那个板桥就是“数据库已死”的坚决鼓吹者。个人认为这种思想太极端。

无论是orm,还是存储过程,都不会这么轻易的死掉。各有各自适合的场景。
15 楼 zivpiggy 2009-08-21  
确实,小项目可以。大点的项目我还是更愿意看E-R图和表结构,所谓蜘蛛网的E-R图也应该会有局部的切分。总之,lz的想法不错。
14 楼 rain2005 2009-08-21  
小型项目可以,大型项目就别想了。

一般大型的企业应用都是由资深业务人员(这些人只注重业务,不注重技术)定的数据库结构,开发根本主导不了。这就是国内的现状。



13 楼 lovit 2009-08-21  
everlasting_188 写道
好奇怪的想法:
1>无论使用什么技术,持久化现在的解决方案都是数据库,如果你能提出自己使用hiberante+自己的持久存储(比如自己写数据库)来解决的话,那是超级大牛
2>如果自己做不了持久存储,使用数据库的话,那:
   凭什么说以数据库设计,结合ORM有问题。进一步说,你使用hibernate+文件存储(自己定制hiberante的sql的引擎)也能行,但是你的解决方案有多大价值。
    你使用hibernate加上自己的设计,可以解决水平的问题,单是单点性能的问题你如何解决?绝大多说在百万级的数据下(并发<100),不需要考虑水平扩展,恰当的使用数据库,单台机器就解决了,而你只是觉得ORM是外能,根本不考虑充分利用数据库性能,用了10台机器,对客户来说会使用谁的方案。
3>终极的方案是:定制自己的存储和分布数据策略,和使用hiberante没什么关系,只是一种工具。 淘宝没有用hiberante,仍然做的很好。

每一种技术都有适当的范围,不是万能的钥匙。

同意一下.呵。。。
12 楼 jansel 2009-08-21  
好像大家对Hibernate成见很深,其实无非就是性能问题。

自己说几点心得:

考虑使用Hibernate一定要考虑本身的数据库建模适合不适合,我之前做项目数据库建模建的很差,那种情况下使用Hibernate很别扭。

如果从业务逻辑上A依赖B,B又依赖C,C又依赖D,这个不一定就一定要把A、B、C、D揉在一起搞,这么搞,哪个ORM都受不了,尝试着去分成若干的小块就搞。

大型系统一般都会搞集群,这样的话我们就仅考虑单点的性能了。经常有人说,我有上亿数据,用Hibernate怎么搞。如果一个单点搞定比较难了,你直接使用JDBC一样很难搞定。

反正怎么说呢,天下没有免费的午餐。想用好Hibernate,如果不深入,那么很难用好的。再说一下,Hibernate也不是银弹。
11 楼 lizhiy05 2009-08-21  
暂时还没有这方面的经验,看不懂再说什么
10 楼 javaTo 2009-08-21  
存储方案不用数据库用什么,难道自己开发?
世界上有几个Google呢?

就算自己开发,你确认各方面都比现有方案好?
财力,才力
9 楼 fjlyxx 2009-08-21  
我觉得数据库没这么简单,有的公司牛JAVA拉数据库 有的公司是牛数据库拉JAVA 现在公司考虑的都是复用和快速高效的开发  如果新加一个扩展都没有工作量 怎么能有细水长流的业务呢...
8 楼 everlasting_188 2009-08-21  
狂放不羁 写道
确实,数据库思维最终导致数据库单点瓶颈,系统没有水平伸缩性,而采用面向对象建模,再加上对象的缓存,必要的时候能引入异步,这样就能在一定程度上增加系统的伸缩性,但是这也需要一定的挑战,比如缓存和数据库之间如何同步更新,以及内存事务如何控制等问题。


数据库是瓶颈主要原因有二种:
1>应用体系结构上不支持分布性,类:google等其它的解决方案

hiberante不是这种解决方案的技术

2>使用数据库上,没有考虑数据库的使用方式

这是自己自己麻烦的问题,和面向对象没什么关系。极端的举个例子,如果你写个程序写成死循环了,那么是不是操作系统设计的问题?你写的程序会不会考虑运行的环境?

百度的开发经理说过一句话:如果你的程序能让Cpu和IO同时达到95%以上,google和百度肯定会录用你。

经常我们是:分布式做不到一个很好的方案(和大公司比),不愿意充分利用现有的成熟的技术。在应用层面拿面向对象说事,范围还是太窄,需要开阔眼光。

对企业来说,性价比第一位,不需要考虑分布和扩展;对电信和互联网来说,需要分布和可扩展。学习和自己的定位有关,不同的行业有不同的技术要求。

要专业,而不是泛泛而谈,人云亦云,要有自己的独立的判断能力。
7 楼 everlasting_188 2009-08-21  
好奇怪的想法:
1>无论使用什么技术,持久化现在的解决方案都是数据库,如果你能提出自己使用hiberante+自己的持久存储(比如自己写数据库)来解决的话,那是超级大牛
2>如果自己做不了持久存储,使用数据库的话,那:
   凭什么说以数据库设计,结合ORM有问题。进一步说,你使用hibernate+文件存储(自己定制hiberante的sql的引擎)也能行,但是你的解决方案有多大价值。
    你使用hibernate加上自己的设计,可以解决水平的问题,单是单点性能的问题你如何解决?绝大多说在百万级的数据下(并发<100),不需要考虑水平扩展,恰当的使用数据库,单台机器就解决了,而你只是觉得ORM是外能,根本不考虑充分利用数据库性能,用了10台机器,对客户来说会使用谁的方案。
3>终极的方案是:定制自己的存储和分布数据策略,和使用hiberante没什么关系,只是一种工具。 淘宝没有用hiberante,仍然做的很好。

每一种技术都有适当的范围,不是万能的钥匙。
6 楼 rainlife 2009-08-21  
狂放不羁 写道
确实,数据库思维最终导致数据库单点瓶颈,系统没有水平伸缩性,而采用面向对象建模,再加上对象的缓存,必要的时候能引入异步,这样就能在一定程度上增加系统的伸缩性,但是这也需要一定的挑战,比如缓存和数据库之间如何同步更新,以及内存事务如何控制等问题。

对,这也是“数据库之死”最主要的思想了,而jdon推荐DDD思想,也是基于这个吧。
5 楼 rainlife 2009-08-21  
liujunsong 写道
楼主想的太简单了.
数据库系统发展这么多年了,已经形成了一套自己的完整的理论体系,你看书店里面有多少讲专门数据库理论的书?这是一门学问,有理论基础所以才能屹立不倒.
而orm,hibernate这些东西,最大的问题就是没有自己的理论体系,因此其发展受到很大的局限,基本上处在不可控的状态.
楼主对问题的分析和理解,实在是太缺乏专业精神了.

也不是说想得简单,无非是在小项目中的一次尝试。
4 楼 rainlife 2009-08-21  
ray_linn 写道
恩 oracle真该羞死啊...

不知道LZ用hibernate去实现过复杂统计,复杂报表么?这时候你会发现hibernate多么力不从心。

仅仅拿个hibernate,就去鄙薄ERwin之类的建模工具,未免浅薄。关系建模有自己的应用场景,存储过程仍然是坚如磐石的东西,牢牢占据了电信、银行、保险等等企业应用的顶峰。


问一个问题:
复杂的统计,复杂的报表,统计的是什么?报表的数据哪里来?再复杂的报表,再复杂的统计,最终到达数据库层面的,无非就是那层简单的数据库表之间的关系,这于hibernate又有何干?无非最终又绕到什么hibernate性能差之类的吧?
3 楼 ray_linn 2009-08-21  
恩 oracle真该羞死啊...

不知道LZ用hibernate去实现过复杂统计,复杂报表么?这时候你会发现hibernate多么力不从心。

仅仅拿个hibernate,就去鄙薄ERwin之类的建模工具,未免浅薄。关系建模有自己的应用场景,存储过程仍然是坚如磐石的东西,牢牢占据了电信、银行、保险等等企业应用的顶峰。

2 楼 liujunsong 2009-08-21  
楼主想的太简单了.
数据库系统发展这么多年了,已经形成了一套自己的完整的理论体系,你看书店里面有多少讲专门数据库理论的书?这是一门学问,有理论基础所以才能屹立不倒.
而orm,hibernate这些东西,最大的问题就是没有自己的理论体系,因此其发展受到很大的局限,基本上处在不可控的状态.
楼主对问题的分析和理解,实在是太缺乏专业精神了.
1 楼 狂放不羁 2009-08-21  
确实,数据库思维最终导致数据库单点瓶颈,系统没有水平伸缩性,而采用面向对象建模,再加上对象的缓存,必要的时候能引入异步,这样就能在一定程度上增加系统的伸缩性,但是这也需要一定的挑战,比如缓存和数据库之间如何同步更新,以及内存事务如何控制等问题。

相关推荐

    产品实习生:第一次独立带项目的总结思考.pdf

    "产品实习生:第一次独立带项目的总结思考" 本文是对第一次HOLD一个项目的总结与反思,作为一名新人,第一次做活动是很茫然也很容易踩坑。作者总结了许多经验和思考,希望和小伙伴们看了有所收获。 背景和目的 ...

    软件项目管理思考题.docx

    软件项目是一次性的、以目标为导向的、通过项目经理及其团队工作完成的,而日常运作是重复进行的、通过效率和有效性体现的、职能式的线性管理。软件项目存在大量的变更管理,而日常运作则基本保持连贯性。 三、软件...

    项目经理培训关于项目沟通的几点总结

    项目经理是项目成功的关键角色,而沟通管理则是项目经理的必备技能之一。有效的沟通能够管理认知,管理期望,确保项目团队的协调一致,减少冲突,并解决项目管理中可能出现的问题。以下是关于项目沟通的一些关键点:...

    项目管理课件第一次课.pptx

    "项目管理课件第一次课.pptx" 提到,项目管理首先是一种见识,它涉及对复杂问题的战略性思考和决策。课程强调了改变人的观念,即世界观的重要性,这在项目管理中表现为创新的思维方式和解决问题的能力。课程采用互动...

    某国际食品城项目系统思考讲义.ppt

    【某国际食品城项目系统思考讲义】 该项目主要聚焦于建设一个国际食品交易平台,结合了行业背景、地域优势以及面临的挑战。以下是对该项目关键知识点的详细解析: 1. **行业背景**:中国的食品工业在2010年后呈现...

    第一次把事情做对(2).pdf

    《第一次把事情做对》这本书的核心理念是倡导在工作和生活中追求零缺陷,即首次执行任务就能达到预期标准,避免返工和浪费。作者杨钢通过自己的经历和读者的反馈,强调了书中观点的影响力和实际应用效果。他认为,...

    黑马十次方项目

    - **Spring Cloud**:基于Spring Boot实现的一套微服务云应用开发框架,提供了微服务解决方案,包括配置管理、服务注册与发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、...

    大型项目架构演进过程及思考的点

    ### 大型项目架构演进过程及思考的关键知识点 #### 一、大型项目架构演进的基本概念 在大型项目的生命周期中,其架构和技术选型并非一成不变,而是随着业务的发展和技术的进步逐步演变而成。这一过程涉及从最初的...

    12.4综合与实践一次函数模型的应用课件.ppt

    课堂小结时,学生应反思在学习过程中掌握了哪些知识,如一次函数模型的建立和应用,以及在探索知识时主要运用的分析方法,可能是观察、实验、图形分析或代数推理等。 总的来说,这节课旨在提高学生的函数建模能力和...

    IT项目经理成长手记——来自项目第一线的管理经验和实用工具分享

    里面讲了多种控制项目的工具和方法,以及项目的不同周期要思考和解决的问题,写得很不错! 里面讲到了很多项目上遇到的问题,让人受益匪浅! 前言 第1章 “迷你”CEO——项目经理不简单 1.1项目经理是干什么的 ...

    高职项目课程教学方案设计的新思考精选文档.doc

    3. 复杂性与一次性:项目应具有一定的复杂性,挑战学生的解决问题能力,同时每个项目都是独特的,避免重复性训练。 4. 客户导向:项目应以满足客户需求为出发点,让学生学会从客户的角度思考问题。 例如,设计一个...

    晋城泛亚工业品商贸物流中心项目发展思考.pptx

    此项目是昆明市政府重点规划的14个泛亚商贸物流中心之一,旨在打造一个集交易、加工、仓储、物流等功能于一体的高标准、国际化商贸集群,服务于东南亚、南亚、南欧乃至非洲的工业品贸易。 **立足昆明城市发展看项目...

    XXXX年中国漯河国际食品城项目系统思考(42.pptx

    【XXXX年中国漯河国际食品城项目系统思考】的分析展示了该项目在财务管理类的PPT文档中的详尽评估。以下是对项目关键知识点的深入探讨: 一、项目概况 该项目位于河南漯河,享有“中国食品名城”的美誉,食品工业在...

    IBM项目经理培训完美教程

    以下条款是为了更好地协助项目领导在组织内的工作。在管理项目之时,应利用这些条款来帮助确定所有的关键...根据每一项目的具体特征,应该每一次都已全新的“专业化”的态度去面对。应该以这样的态度对待每一个项目。

    建筑工程项目管理思考.doc

    【建筑工程项目管理思考】 本文主要探讨了建筑工程项目管理在当前城市现代化建设背景下的重要性和面临的挑战。建筑行业作为国民经济的重要支柱,随着城市化进程的加速,工程的数量和规模日益增大,对施工技术和管理...

    建筑工程项目管理思考及练习答案.doc

    工程工程管理,特别是建筑工程工程管理,除了上述特性,还强调一次性管理、全过程管理和强约束性,旨在高效地实现建筑项目的目标。 建筑工程工程管理是针对建筑工程项目的特定管理活动,以优化实现项目目标为宗旨,...

    某科技城项目策略思考的沟通提案.pptx

    南京中航科技城项目策略思考的沟通提案主要探讨了如何利用南京的历史文化底蕴和现代发展契机,打造一个集商业、科研、居住和文化于一体的综合性科技城。项目的核心目标是成为南京城市优化的引擎,促进区域升级,推动...

Global site tag (gtag.js) - Google Analytics