现在开源的各种framework非常的多。干什么的都有。但是,是不是我们使用了这些开源framework就能够一劳永逸的解决我们的设计问题呢?我觉得答案是否定的。如果没有自己对设计和系统的理解。框架滥用就在所难免。比如说hibernate(以下简称HI),它是一个对象持久框架,他的目的非常的简单,就是提供对象持久化的手段。但是在日常的工作中,我经常看见很多人把HI用的非常的复杂,希望用HI实现一些复杂的数据库查询,似乎把HI看作了一个数据库抽象层了。使用HI,却永远不忘记SQL。我觉得这是不正确的。虽然HI的本质是ORM。但是它可不是用来替换数据库的。不要把HI当作数据库一样去操作。在设计的时候要考虑对象的差别,那些是业务对象,那些本身就是数据。如果本身就是处理数据的话,我们可以使用criteria这样的数据操作封装来操作数据。甚至,直接使用SQL语句,这时候我们的视角就发生了变化,不在是停留在业务对象上了。数据就是数据不要往对象上靠,这样更好。动不动的就搞一个POJO可不是一个好的习惯。另外,如果我们是对原有系统进行改造的话,推荐使用cayenne,apache的开源orm,有自己的管理器,可以自动从数据库中同步出pojo来。
如果是我们自己从头开始设计系统,建议不要再在数据库里面指指戳戳了。把数据库表之间的关系,改为对象之间的关系,自己写程序来维护自己对象之间的关系,推荐使用di(依赖注入),不用也可以,关键看你系统的规模。数据库中的表要尽可能的简单,要分维度和事实,以便于复用并(建议大家了解一些数据仓库的概念)减少表中的字段数。如果你采用多维结构来设计数据库的话,表中的字段不会很多。设计的好坏完全凭你多年的经验和对客户系统的了解。(分析出那些是维度,那些是事实,不是一个容易的事情,做过的人都知道)
对于框架的应用,我本身都是非常慎重的。如果我们不理解这些框架的使用背景,使用这些框架,就难免产生各种各样的问题。那么,好与不好的原则是什么?我觉得《Better, Faster, Lighter Java》一书的作者说的很好:Keep It Simple、Do One Thing,and Do It Well、Strive for Transparency。翻译过来就是:保持简单、一次做好一件事、力求透明。其实一个好的框架最起码要做到的就是透明性,有些人也管它叫非侵入性。比如spirng。(spring因此遭到批评说它其实什么也没有做,这个我有所同感)其实侵入性不是框架的问题,是我们自己设计的问题。我们应该在我们的设计中对引入的框架部分做我们自的接口,这样就可以摆脱框架侵入性的困扰。
最后我想说说我心目中的先进的web应用框架应该是什么样子的。首先它一定是REST的,所有的东西都是资源,这样可以避免session的烦恼。其次,它一定是面向服务的,也就是所谓的soa,这样可以实现松耦合,并且可以实现类似组件的功能。view部分一定是ajax的,但是也要组件化,现成的方式是EXT+buffalo。但其实也可以使用其他的界面方式,比如net 的winform或者java的swing。最后还有一个对象管理器,专门负责业务对象的管理。透明的采用aop的方式,把日志、任务、权限、事物、工作流,集成进来,各个部分都是独立可配置的。可以根据需要将它们配置进我们的应用中。最后提供一种分布式的解决方案来应对可伸缩性。另外根据约定,尽量减少配置的数量和次数,尽可能的提供配置工具,而不是我们手写XML配置文件。
分享到:
相关推荐
目前,公司越来越多的项目现场是没有ArcGIS产品的,虽然,我们已能利用GeoServer来代替ArcGIS Server使用,也推出了相应的产品,并且在很多个项目中已经运用,但是仍然是有不足的。文档详细探讨了本公司开源解决方法...
《开源》杂志2009年第4期闪亮发布,火热下载中!本期重点文章: 基于互联网的移动应用大势 Linux基金会呼吁厂商放弃微软FAT文件系统 Intel将Moblin社区控制权转给Linux基金会 中科红旗及其总裁贾栋分获“中关村突出...
是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 Kubernetes是一个轻便的和可...
系统架构 签到系统主要由数据库服务器、WIFI接入点、案桌手机客户端及服务器四部分构成: 1) 数据库服务器保存签到人员的签到位置信息,签到时间信息及其他控制信息,此 据库还存储签到人员的基本信息,如学号,...
硬盘上也有自己的快取装置,因此squid cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。
PyView的制作PyView的基本原理是,应该有一个... PyView使用Model-View-Controller(MVC)设计在GUI库(“视图”)(wxPython当前是唯一受支持的库)周围提供包装器,可轻松将(“ Controller”)值绑定到您的python变
随着Internet信息技术的飞速发展,传统的服务业模式逐渐被信息化、网络化的现代服务业模式所代替,客房预定服务亦是如此。 客栈联盟是一个基于JavaEE采用SSH框架、百度地图API开发的Java Web应用程序。该系统采用了B...
官方应用仓库拥有大量的第三方的插件和应用模块、模板主题,众多来自开源社区的贡献,让你的网站“One”美无缺! 开源免费 代码遵循Apache2开源协议,并且免费使用,对商业用户友好。 模块化开发 全新的架构和...
随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。LAMP是基于Linux,Apache,MySQL和PHP的开放资源...
Asp.net 利用OleDb的GetOLEDBSchemaTable方法得到数据库架构信息 用于 Visual Studio .Net 的 IBM DB2 开发外接程序 第2章 并发操作的一致性问题 (2) Using sqlite with .NET Visual Studio 2005 中的新 DataSet ...
采用谷歌开源的 Kubernetes,对私有云平台架构中各个组件进行分析,通过开发一键式部署安装 脚本,搭建了基于容器的气象私有云平台。这种自动化部署方式,简化了部署过程、提高了工 作效率,降低了手动部署过程中...
Mule的核心组件是UMO(Universal Message Objects,从Mule2.0开始UMO这一概念已经被组件Componse所代替),UMO实现整合逻辑。UMO可以是POJO,JavaBean等等。它支持30多种传输协议(file,FTP,UDP,TCP,email,HTTP,SOAP,JMS...
数据治理工具指为数据治理项目而开发,以满足数据治理规划、设计、实施、常态化运营工作的一系列应用程序系统集和其他...同时,通过引入更先进的技术、工具和自动化手段代替低效的重复劳动,可以让组织效率有明显提升。
1.概述 ...作用是可以代替传统的Intent,Handler,Broadcast或接口函数在Fragment、Activity、Service、线程之间传递数据进行通信,执行方法。做为消息总线,有三个主要元素: (1)Event:事件 (2)Subs
Mule的核心组件是UMO(Universal Message Objects,从Mule2.0开始UMO这一概念已经被组件Componse所代替),UMO实现整合逻辑。UMO可以是POJO,JavaBean等等。它支持30多种传输协议(file,FTP,UDP,TCP,email,HTTP,SOAP,JMS...
CodePress 完全开源,非常容易集成。 CodePress 支持众多语言语法高亮,例如 PHP, Javascript, Java, Perl 等等,而且作者还在陆续添加更多语言支持。我查看了 CodePress 的代码,良好的架构使得 CodePress 扩展新的...
它着眼于变成彻底开源、完全免费、而且高品质的绘图软件,应用它能够轻轻松松建立数据图表,适用商务接待、工程项目、电气设备、网络设计方案、软件设计方案等众多行业的技术专业绘图。软件功能齐全,可以适用...
凭借可提供最大灵活性和自由度的基于服务的架构,它是雄心勃勃的企业和品牌的理想商务解决方案。 Reaction Commerce 是为规模而构建的,能够每天处理数万个订单并传输数百万次价格和库存变化。 它非常快,平均响应...