论坛首页 Java企业应用论坛

编程中一个很常见的问题,有帮助的

浏览 29470 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (17)
作者 正文
   发表时间:2008-12-19  
抛出异常的爱 写道
fjlyxx 写道

已经给出一个背景了,就是 根据用户输入--》组装SQL-》执行数据库操作-》返回结果(解析结果)

用第二种方式....
你说的已经是你的答案了.

但在现实中:
是用户输入,用户输出, 用户需求1,用户需求2,用户需求3.有可能还有用户需求4.....
现在没有需求4但很可能会加上需求4或需求5....
那么用第一种方式是最合适的....

用哪种方式,与你用的中文描述有直接的关系....

PS现在的系统大多用方式 1 主要还是由于每层的代码总量太大.合起来人类很难理解.

PS:楼上...链式写法我看了就想到了jquery.....等我出去吐一下先/



还在吐?!我还等着学习呢?!
0 请登录后投票
   发表时间:2008-12-19   最后修改:2008-12-19
fjlyxx 写道
难道你们的系统都没有进行过重构吗?  好的系统是重构出来的,好好的看看重构的原则,如果你没有这么做过,你怎么会发现模式的重要。如果你的接口都是随便定义的那么你怎么能体会这两种方式的区别呢?
public Object findUser(final Map parameters) {
return this.getSqlMapClientTemplate().queryForObject("findUser", parameters);
//      |                      |                                                          | 
//   返回结果       组装SQL并执行数据库操作                         根据用户输入

这完全是一个不合格程序员写的代码。

去看看自己作的系统中有多少这样的情况,不是我自大,我只是想提醒这么一种常见的错误,让后辈人少走点弯路。



合格的写法是啥?让我们看看重构理论大师如何实践重构的?
0 请登录后投票
   发表时间:2008-12-19   最后修改:2008-12-19
果然有帮助
0 请登录后投票
   发表时间:2008-12-19  
抛出异常的爱 写道

由于没有逻辑可言的情况下
第二种的代码信息含量更接近5这个数....
更易让人记忆与查寻.....


原来你还能写出不含逻辑的代码?

抛出异常的爱 写道

OO的主要目的就是少记忆 ,快速查找


这样都能混到5颗钻石?!
0 请登录后投票
   发表时间:2008-12-19  
我同意 抛出异常的爱的说法,因为软件是业务的抽象,OO的的作用是可以少记忆 ,快速查找 ,我个人觉得这点可以说是00的初衷(对于程序员来说)。
0 请登录后投票
   发表时间:2008-12-19  
fjlyxx 写道
我同意 抛出异常的爱的说法,因为软件是业务的抽象,OO的的作用是可以少记忆 ,快速查找 ,我个人觉得这点可以说是00的初衷(对于程序员来说)。

不敢苟同
OO语言可以很好的表述设计模式中的良好的设计思想(即更好的满足解耦合,易扩展等设计思想),正如C语言可以很好的描述经典数据结构和算法一样。这才是OO存在的意义。
0 请登录后投票
   发表时间:2008-12-19  


frogfool 写道
fjlyxx 写道
难道你们的系统都没有进行过重构吗?  好的系统是重构出来的,好好的看看重构的原则,如果你没有这么做过,你怎么会发现模式的重要。如果你的接口都是随便定义的那么你怎么能体会这两种方式的区别呢?
public Object findUser(final Map parameters) {
return this.getSqlMapClientTemplate().queryForObject("findUser", parameters);
//      |                      |                                                          | 
//   返回结果       组装SQL并执行数据库操作                         根据用户输入

这完全是一个不合格程序员写的代码。

去看看自己作的系统中有多少这样的情况,不是我自大,我只是想提醒这么一种常见的错误,让后辈人少走点弯路。



合格的写法是啥?让我们看看重构理论大师如何实践重构的?



fjlyxx 写道
我同意 抛出异常的爱的说法,因为软件是业务的抽象,OO的的作用是可以少记忆 ,快速查找 ,我个人觉得这点可以说是00的初衷(对于程序员来说)。



恳请先用实践证明一下前面的重构理论不是赋予表面的?!
0 请登录后投票
   发表时间:2008-12-19  
frogfool 写道
fjlyxx 写道
难道你们的系统都没有进行过重构吗?  好的系统是重构出来的,好好的看看重构的原则,如果你没有这么做过,你怎么会发现模式的重要。如果你的接口都是随便定义的那么你怎么能体会这两种方式的区别呢?
public Object findUser(final Map parameters) {
return this.getSqlMapClientTemplate().queryForObject("findUser", parameters);
//      |                      |                                                          | 
//   返回结果       组装SQL并执行数据库操作                         根据用户输入

这完全是一个不合格程序员写的代码。

去看看自己作的系统中有多少这样的情况,不是我自大,我只是想提醒这么一种常见的错误,让后辈人少走点弯路。



合格的写法是啥?让我们看看重构理论大师如何实践重构的?


我也非常好奇啊,请问这段代码的问题在哪里?应该如何重构?

我至今为之没有看到楼主给我们写出代码来,所以我完全不知道你所谓的重构到底是什么。
0 请登录后投票
   发表时间:2008-12-19  
downpour 写道
frogfool 写道
fjlyxx 写道
难道你们的系统都没有进行过重构吗?  好的系统是重构出来的,好好的看看重构的原则,如果你没有这么做过,你怎么会发现模式的重要。如果你的接口都是随便定义的那么你怎么能体会这两种方式的区别呢?
public Object findUser(final Map parameters) {
return this.getSqlMapClientTemplate().queryForObject("findUser", parameters);
//      |                      |                                                          | 
//   返回结果       组装SQL并执行数据库操作                         根据用户输入

这完全是一个不合格程序员写的代码。

去看看自己作的系统中有多少这样的情况,不是我自大,我只是想提醒这么一种常见的错误,让后辈人少走点弯路。



合格的写法是啥?让我们看看重构理论大师如何实践重构的?


我也非常好奇啊,请问这段代码的问题在哪里?应该如何重构?

我至今为之没有看到楼主给我们写出代码来,所以我完全不知道你所谓的重构到底是什么。


public String test(){
		String temp = "a|b|c|d|e|f";
		return test1(temp);
	}

	public String test1(String s){
		String[] p = s.split("\\|");
		return this.test2(p);
	}

	public String test2(String[] s){
		List list = new ArrayList();
		for(int i = 0;i < s.length;i++){
			list.add(s[i]);
		}
		return this.test3(list);
	}

	public String test3(List list){
		return list.toString();
	}


再看这种写法

public String test(){
		String temp = "a|b|c|d|e|f";
		String[] test1rs = this.test1(temp);
		List test2rs = this.test2(test1rs);
		String test3rs = this.test3(test2rs);
		return test3rs;
	}

	public String[] test1(String s){
		String[] p = s.split("\\|");
		return p;
	}

	public List test2(String[] s){
		List list = new ArrayList();
		for(int i = 0;i < s.length;i++){
			list.add(s[i]);
		}
		return list;
	}

	public String test3(List list){
		return list.toString();
	}


一样的功能 初看起来没有什么区别,如果我业务变化了 明显2的实现 容易改动。我在前面的回复中已经说了不是要怎么去解决实际的结构问题,问题是怎么去看重构。
0 请登录后投票
   发表时间:2008-12-19  
恕我直言,你上面的例子实在无法说明你的重构思路。事实上,我不认为这样的代码会在我的代码中出现。

fjlyxx 写道
难道你们的系统都没有进行过重构吗?  好的系统是重构出来的,好好的看看重构的原则,如果你没有这么做过,你怎么会发现模式的重要。如果你的接口都是随便定义的那么你怎么能体会这两种方式的区别呢?
public Object findUser(final Map parameters) {
return this.getSqlMapClientTemplate().queryForObject("findUser", parameters);
//      |                      |                                                          | 
//   返回结果       组装SQL并执行数据库操作                         根据用户输入

这完全是一个不合格程序员写的代码。

去看看自己作的系统中有多少这样的情况,不是我自大,我只是想提醒这么一种常见的错误,让后辈人少走点弯路。


我更想听听你怎么重构这样的代码。
0 请登录后投票
论坛首页 Java企业应用版

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