论坛首页 Java企业应用论坛

javaWeb开发越来越复杂的情况下,如何尽力简化?

浏览 24610 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-01  
pipilu 写道


    数据结构通过domain对象就可以体现了,用不着数据库表结构。“多年积累的数据才是最宝贵的财富”,这个是绝对正确的,那跟你用关系数据库、或是对象数据库、还是文档数据库存储有半毛钱的关系么?它们都是数据。

    事实上不仅跟数据库有关系,而且关系很大。由于数据量巨大,目前来看只能用关系数据,由于要求高可靠性,目前只能用Oracle,由于围绕数据库的各类数据分析应用软件为了效率关系,用了大量Oracle特有的数据方言,因此,从目前情况来看,要改变数据库基本上是不可能的事。

0 请登录后投票
   发表时间:2009-06-01  
pipilu 写道
coyizz 写道

明明可以做到http://127.0.0.1/login.class直接调用用户登录界面,确偏要用struts在xml配置文件里跳过去,跳过来,感觉象脱了裤子放屁,出现了错误难以快速定位。我现在的开发框架,实质上是纯的Servlet,不用JSP,前端的Html和JavaScript由服务器端在需要时生成,SQL也由DataStore对象在需要时生成。


如果不想要那个配置,那就是在web.xml里配置呗?省了啥了??要么就是使用“约定优于配置”的思想,就像Grails框架,这是没有配置的。还有干脆不用这个配置的,那就用Stripes框架。

前端没用JSP,很正常啊,现在都用模板了,不知道你是怎么做的?不会是用原始的在servlet里out.println吧??你是怎么保证风格一致的?怎么统一页面校验、出错时的行为的?输入校验、数据类型的转换你是怎么做的?

引用
SQL也由DataStore对象在需要时生成

意图何在?轻型的可以用iBatis,重型的那就用Hibernate。JPA我还没深入了解。你的这个跟它们比有什么优势么(针对特定的场景)?

   新手写程序,动不动就想着“干脆咱们推倒重来”吧(你不一定是新手,我只是指一种不好的习惯)。你真的仔细的研究了那些框架么?


Servlet只有一个,负责转发所有的Url请求到相应的类,
    <servlet>
        <servlet-name>HzServlet</servlet-name>
        <servlet-class>com.coyizz.base.HzServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HzServlet</servlet-name>
        <url-pattern>*.class</url-pattern>
    </servlet-mapping>

常用的数据表增、删、改、查等由相同的底层对象实现,因此,能保证界面的统一,由于以实现了大粒度的功能较强的数据库对象,一般用不上Html元素的输出,如果需要,则可使用封装为Java对象的Html元素,
如输出大小为13px的红色字串。

代码为out(new HtmlFont("Hellow World!", "13px").setColor("while"))
DataStore比Hibernate没有做过全面的比较,只是因为我过去用PB较多,所以类似地做了一个DAO对象,用起来更加习惯而已。

风格一致不成问题,再多的功能也是一个风格,
可参考http://218.6.135.11/jweb/



0 请登录后投票
   发表时间:2009-06-01   最后修改:2009-06-01
coyizz 写道

Servlet只有一个,负责转发所有的Url请求到相应的类,
    <servlet>
        <servlet-name>HzServlet</servlet-name>
        <servlet-class>com.coyizz.base.HzServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HzServlet</servlet-name>
        <url-pattern>*.class</url-pattern>
    </servlet-mapping>

常用的数据表增、删、改、查等由相同的底层对象实现,


哈,如果没猜错的话,你说的这种设计我使用过,实际上就是“约定优于配置”的一种设计。进入到这个servlet后,根据类名找到各模块的入口,再进一步根据名称来找到相应的(增删改查的)servlet。实际上用反射实现的。如果想扩展加入新的模块(符合命名规则及目录结构),只需要把那个模块的包拷入,无需修改任何配置即可以使用。

不过页面流转只是框架的一部分作用,其它还有:数据类型转换(比如程序中的Date型转换为页面上的字符串)、表单数据校验、集中定义的提示信息、拦截器、国际化支持。还有一个比较突出的优势是:便于(脱离容器)测试。这些功能,自己不想用可以不用,但一旦想用,就可以很容易的加上并且不会破坏原有的代码。这就是框架的好处——可以先以简化方式搭建起来程序,之后可以平滑的扩展、丰富程序
0 请登录后投票
   发表时间:2009-06-01   最后修改:2009-06-01
做小WEB项目用 STRUTS2 +HIBERNATE + SPRING  再加上个jquery 就行了,很快地。
要是RIA的话 flex+STRUTS2 + HIBERNATE + SPRING 就该可以了吧。
其它的框架我还真不会用hehe,你们说的那一个一个的,我都不了解。hehe。
至于struts.xml 中的action 配置问题。可以先规化好URL,用约定大再匹配的方式也是就宽匹配吧,能极大的少去很多配置。还能解决URL重写的问题
上次有个用.net做WEB的朋友跟我说,他那些WEB活,都是拿开就用dotnet环境建项目直接开干,没什么框架选择。
我用dotnet做了个小WEB,发现用dotnet的控件不太爽(可能是手笨),于是把前台全用HTML写了次,再上dotnet里配数据,也很快的。
0 请登录后投票
   发表时间:2009-06-02   最后修改:2009-06-02
!数据类型转换和数据校验!
在 dsMain = new DataStore("dsMain", "select code, name, birthDay from useA", getConnItem());  中指定了DAO的数据来源只后,实际上DataStore对象就可以通过结果集的ResultSetMetaData信息知道birthDay是日期字段了,在需要显示日期的地方,用dsMain.getItemHtml(1, "birthDay")即可取得需要的Html内容,在需要显示数据表格的地方,用dsMain.getTableHtml()可取得整个表格,在需要数据输入的地方,可用dsMain.getHtmlForm()取得表单,如果对取得的缺省数据显示格式不满意,可用CSS进一步进行修饰。在一般情况下,以上代码除第一句外,其他都不需要写,因为DataStote知道了数据表结构,通过URL进入本对象后,一切都可自动完成了。基本的数据校验也由系统底层完成,由于DataStore已经知道birthDay是日期字段,因此,在其生成的表单Html中,不但包含了birthDay的输入框,而且包含了日期选择JavaScript对象,可前端日期校验的JavaScript脚本,同时,为了避免前端黑客通过专用工具避开前端校验提交非法数据,在数据提交到服务器端后,服务器端还会对数据进行校验。如果用户需要添加自己的日期校验条件,只需要覆盖onValidCheck()方法即可:

public void onValidCheck() {
    if (dsMain.getItemDate(1, "birthDay") > new Date())
        getErrMsg().add("您不可能在今天之后才出生吧?");
}
0 请登录后投票
   发表时间:2009-06-02  
!DataStore对象的优势!
对于过去由PB转到Java开发的人有亲切感,注重简单实用。内含有SQL解析、数据校验、数据导出、数据更新等多个功能。

DataStore ds = new DataStore("", "select code, name, org, n1, n2, n3, n4 from useA", getConnItem()); // 对象初始化

ds.setcolCodeTable("org", "select code, note from org"); // 设置机构字段为编码字段

ds.retrieve();  // 提取数据,缺省最多提取1000条记录
ds.print();     // 在控制台显示全部数据

String s;
s = dsMain.getItemStr(1, "code"); // 取得结果集中第一行数据的code字段的值

s = dsMain.getItemStr(1, "org"); // 取得结果集中第一行数据的org字段的编码值,如“5100”
s = dsMain.getItemText(1, "org"); // 取得结果集中第一行数据的org字段的原文值,如“四川省”

ds.getSql().setQueryWhere("org like '51%'");  // 设置查询条件
ds.retrieve();

ds.fillSumCol("n4", "n1,n2,n3", 1, ds.getRowcount()); //列求和 n4 = n1 + n2 + n3

ds.setItem(1, "note", "张三"); // 设置字段的值
ds.setColcanUpdate("n4", false);  // 禁止字段n4更新
ds.update();                  // 更新数据库

ds.setSort("code,note");
ds.sort();                     // 排序
0 请登录后投票
   发表时间:2009-06-02  
引用

经常处理大型通讯系统、行业专门应用、经常负责集成用户原本的各种孤立系统,等等真正应用架构的人,一下就可以看出猴子化妆出来的美女。

一谈设计就从数据库做起,那也就是个小公司的一般 pm 常做的小项目才会有的观点。有经验的架构师正好相反,只是制定标准,清楚地对各种重要的标准的内容和通讯流程进行设计,而把具体的数据库实现等等那些底层的东西放在最后次要位置。


看什么是核心,从我的感觉来看,我去看一个企业系统,如果去看层次架构、再去看接口文档、再去看通讯协议,绝对会尽早晕死。要理解一个系统的本质,我用两招,感觉相当有效:
1、理解数据库。看文档也罢,看数据也罢。不过,看别人的数据库,想理解并不容易。
2、监控数据库操作。你做了一大堆的界面,最终我看看你做了什么Select、Update、Insert,这下基本上明白这个软件在干什么了。

别说一大堆架构、软件设计,做所有的一些(如果你的应用不是数据库应用的,不要牵扯进来),都围绕的一个最终的边界:数据库。因此,返本归原,别花太多时间在软件架构中。

同样,现在的Java,搞了一大堆的ORM,其实本质上也是垃圾一个,如果在程序中直接可以访问SQL了(就是sqlj那种方案),程序直接了当,无论开发速度、可阅读性、性能调优,都远比ORM好。就比如你娶老婆,是想取一个反复包装(经过很多层映射)的还是一个无需包装的美人呢。

再说一大堆MVC的架构,其实MVC这个概念从GUI搬到WEB中,已经完全变质,估计最高发明mvc的人看到JSP、Struts、JSF等层层的框架后,一定会吐血身亡的。硬把运行在浏览器中的View映射到servlet中的MVC,就像你看Photoshop出来的美女一样。
0 请登录后投票
   发表时间:2009-06-02  
wangzaixiang 写道
引用

经常处理大型通讯系统、行业专门应用、经常负责集成用户原本的各种孤立系统,等等真正应用架构的人,一下就可以看出猴子化妆出来的美女。

一谈设计就从数据库做起,那也就是个小公司的一般 pm 常做的小项目才会有的观点。有经验的架构师正好相反,只是制定标准,清楚地对各种重要的标准的内容和通讯流程进行设计,而把具体的数据库实现等等那些底层的东西放在最后次要位置。


看什么是核心,从我的感觉来看,我去看一个企业系统,如果去看层次架构、再去看接口文档、再去看通讯协议,绝对会尽早晕死。要理解一个系统的本质,我用两招,感觉相当有效:
1、理解数据库。看文档也罢,看数据也罢。不过,看别人的数据库,想理解并不容易。
2、监控数据库操作。你做了一大堆的界面,最终我看看你做了什么Select、Update、Insert,这下基本上明白这个软件在干什么了。

别说一大堆架构、软件设计,做所有的一些(如果你的应用不是数据库应用的,不要牵扯进来),都围绕的一个最终的边界:数据库。因此,返本归原,别花太多时间在软件架构中。

同样,现在的Java,搞了一大堆的ORM,其实本质上也是垃圾一个,如果在程序中直接可以访问SQL了(就是sqlj那种方案),程序直接了当,无论开发速度、可阅读性、性能调优,都远比ORM好。就比如你娶老婆,是想取一个反复包装(经过很多层映射)的还是一个无需包装的美人呢。

再说一大堆MVC的架构,其实MVC这个概念从GUI搬到WEB中,已经完全变质,估计最高发明mvc的人看到JSP、Struts、JSF等层层的框架后,一定会吐血身亡的。硬把运行在浏览器中的View映射到servlet中的MVC,就像你看Photoshop出来的美女一样。

1 这些框架没有任何一个是要求你必须使用的,正所谓愿者上钩,况且杀鸡不用宰牛刀
2 数据是业务的核心
3 中间件决定了软件的性能和伸缩能力,但是小软件用不到强大的中间件

总结:业务=>数据库 技术=>中间件 软件 = 业务 + 技术
0 请登录后投票
   发表时间:2009-06-02  
javaWeb 的开发其实看业务的需要。框架多代表的选择的余地丰富。 框架的意义在于我代码变死,把配置文件变活,增加代码永远比修改代码容易的多,但是随之而来的 就是学习的成本。 事情 都有好坏两面,看自己怎么认为吧。
0 请登录后投票
   发表时间:2009-06-02  
wangzaixiang 写道

我去看一个企业系统,如果去看层次架构、再去看接口文档、再去看通讯协议,绝对会尽早晕死。要理解一个系统的本质,我用两招,感觉相当有效:
1、理解数据库。看文档也罢,看数据也罢。不过,看别人的数据库,想理解并不容易。
2、监控数据库操作。你做了一大堆的界面,最终我看看你做了什么Select、Update、Insert,这下基本上明白这个软件在干什么了。


想了解系统??那到页面上点点就知道了,还费那劲。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics