锁定老帖子 主题:不要让开源架构代替我们的设计
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-07
如果是我们自己从头开始设计系统,建议不要再在数据库里面指指戳戳了。把数据库表之间的关系,改为对象之间的关系,自己写程序来维护自己对象之间的关系,推荐使用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配置文件。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-05-07
mcpssx 写道 我心目中最好的web应用框架,就是PHP式的一通乱写,
最烦唠叨什么XML可配置, 分一堆层可维护, 还有什么可伸缩 , 数据库可移植(所以不要用存储过程)。 真是操淡心 一定程度上讲,你的观点非常有道理. 很多情况下,有很多人陷入了过分的"假想需求"之中. 有的公司做产品,要能根据客户的需求定制,所以人家的"产品"有了数据库可移植的需求. 又出来一帮子公司,看到上述公司的东西可以移植数据库,于是他们也做.但是他们根本就是扯淡. |
|
返回顶楼 | |
发表时间:2008-05-07
xellos 写道 有的公司做产品,要能根据客户的需求定制,所以人家的"产品"有了数据库可移植的需求. 又出来一帮子公司,看到上述公司的东西可以移植数据库,于是他们也做.但是他们根本就是扯淡. 非常认同这一句.不说产品,就项目而言,一般公司花高价买进的oracle没五六年是不会大升级版本的,更别提换DB了. |
|
返回顶楼 | |
发表时间:2008-05-07
觉得lz对系统的理解还很理论化,想法不切实际。
而且文不对题。 |
|
返回顶楼 | |
发表时间:2008-05-07
xellos 写道 mcpssx 写道 我心目中最好的web应用框架,就是PHP式的一通乱写,
最烦唠叨什么XML可配置, 分一堆层可维护, 还有什么可伸缩 , 数据库可移植(所以不要用存储过程)。 真是操淡心 一定程度上讲,你的观点非常有道理. 很多情况下,有很多人陷入了过分的"假想需求"之中. 有的公司做产品,要能根据客户的需求定制,所以人家的"产品"有了数据库可移植的需求. 又出来一帮子公司,看到上述公司的东西可以移植数据库,于是他们也做.但是他们根本就是扯淡. 纯属扯淡。分层也好,伸缩性也好,只为了一个目的,就是提高系统的性能。数据库可移植?不知道这是谁想出来的理由。另外,一个清晰的架构,简单易用的配置是为了今后的维护方便,为企业搭建信息系统不是一锤子买卖,系统上线并非一个项目生命周期的结束,今后不断的升级、维护在等着你,而且以后的维护和升级人员并非是最初的创作者,你必须考虑怎么让他们尽快了解你的系统,一个成功的设计不是给开发人员的,而是给维护人员的。体会不到这一点,因为你的项目缺乏持续性,基本都是一锤子买卖。 |
|
返回顶楼 | |
发表时间:2008-05-07
个人意见.
POJO就是为了达到非侵入性的目的. 自动从数据库中同步出pojo来,如果是代码自动生成,那么也是一种侵入性. 如果数据库结构改了,代码就要重新生成,代码里面写的业务逻辑(Domain Method)怎么办?还是需要copy.如果强制不能在数据对象中写domain method,那么就失去了POJO的优越性. 使用criteria这样的数据操作封装来操作数据。 这也是一种侵入性, 相当于把 Java API 侵入到了 SQL / HQL 的领域.(反向侵入) SQL/HQL的可读性更好,更加适合描述表达查询语句. criteria的可读性就差了很多.也蹩脚了许多. 比较好的方法是把所有的HQL/SQL都从Java代码中分离出去,放到单独的资源文件中.统一管理操作. |
|
返回顶楼 | |
发表时间:2008-05-07
mcpssx 写道 分层也好,伸缩性也好,只为了一个目的,就是提高系统的性能。 分层是为了性能?你真的这么觉得吗?没觉得是略微牺牲性能换来可维护性? mcpssx 写道 数据库可移植?不知道这是谁想出来的理由。。 数据库可移植性只是举一个例子来说明有时候这种情况是"假想需求",举例子你懂吗? mcpssx 写道 另外,一个清晰的架构,简单易用的配置是为了今后的维护方便,为企业搭建信息系统不是一锤子买卖,系统上线并非一个项目生命周期的结束,今后不断的升级、维护在等着你,而且以后的维护和升级人员并非是最初的创作者,你必须考虑怎么让他们尽快了解你的系统,
你是大学老师吗?整这么多理论,你不觉得太初级了吗,我想这个论坛没有谁不知道这些.你这种行为就像是到处给别人讲 1+1=2 一样. 人家提到PHP了,你还跟这讨论"为企业搭建信息系统"呢.你见过用PHP做企业信息系统的吗? PHP是互联网应用的王者,暂时它的地位还很稳固. 你了解PHP吗?知道它的优点在哪吗?你是不是觉得它像MS的asp一样该退出历史了? 层次,架构,是为了降低维护成本.这是句废话. 说的是有时候不要过度设计,陷入假象需求.听过"过度设计"这四个字吗? 知道"在一定程度上有道理",和"有道理"的区别吗? mcpssx 写道 一个成功的设计不是给开发人员的,而是给维护人员的。
貌似有道理的一句话 ,你仔细想过吗? 成功的设计会考虑可维护性,但是前半句,"不是给开发人员的"就对了吗? mcpssx 写道 体会不到这一点,因为你的项目缺乏持续性,基本都是一锤子买卖。
就事论事,就理讲理就得了,对什么"你的项目如何如何,体会不到什么什么"这种指手画脚干什么? 整的跟 你多有经验似的? |
|
返回顶楼 | |
发表时间:2008-05-07
刚开始--简单--搞分层--感觉像自虐
需求膨胀--复杂--希望分层--清晰,好维护,可复用。 PHP的红火,个人觉得是由于自由,没有约束。 JSP也可以很自由,但Java的大环境让你不自由。 框架只是工具,分离关注点,不过现在却让人太过去关注框架。 其实PHP框架也很多了,不过一般入门书籍不讲这些。 要是10行代码能解决问题,我也不想为了分层而写30,40行。 其实hibernate的理想状态应该是db4o那样子。 |
|
返回顶楼 | |
发表时间:2008-05-07
没有人把hibernate当作数据库,hibernate的目的不是简单的持久化对象,java的serializer也可以持久化对象,hibernate是什么请先google,hibernate不是面向对象数据库,只是ORM工具,ORM工具就是这个样子,ORM和关系数据库的关系不是互相替代,怎么可以说用了hibernate就替代数据库?没有关系数据库要ORM干虾米?开源框架影响设计,那是因为你对开源框架认识的还不足,个人认为楼主的对于这些概念的理解过于浅,建议先补充一下相关的知识。
|
|
返回顶楼 | |
发表时间:2008-05-07
mcpssx 写道 我心目中最好的web应用框架,就是PHP式的一通乱写,
最烦唠叨什么XML可配置, 分一堆层可维护, 还有什么可伸缩 , 数据库可移植(所以不要用存储过程)。 真是操淡心 显然是没做过大型复杂的企业应用啊 |
|
返回顶楼 | |