String *I am String* (自由大过天) 路漫漫其修远兮,吾以上下而求索

(道,可道,非常道)-----天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。

导航

我的技术和观点

Posted on 2005-07-28 17:37  goodbaby  阅读(642)  评论(1)    收藏  举报
 

我的asp.net vs jsp,以前用了很久的asp.net,现在因为工作需要使用jsp,感觉jsp还是传统的以提交然后取直方式处理数据的,这样的好处是可以获取比较方便的低级别处理,但同时缺少好的一些封装机制,使一些东西实现起来需要做很多重复的事情。Asp.net的良好的面向对象处理方式在这点是感觉很好,同时他影藏了一些低级别的处理也带来了一些不便。但asp.net 更面向对象,而且他的模型是很不同的。在jsp中你用使用request.getParameter(),这样的东西来得到直,感觉不大舒服,而且不支持继承。在一个公共任务分页中,asp.net里我把分页逻辑写成一个用户控件,jsp里有对等的<jsp:include>但是两者最大的区别在与用户控件是一个对象,我可以以面向对象的方式设置这个对象,我以前的做法是把业务对象实现一个分页接口,这样可以是前面的代码减少很多。

SpContrl.PageSize = 15;

SpContrl.SearpatInterface = myBussinessObj;(这里可以是一个业务外观)

Repeater1.DataSource = myBussinessObj.getData(PageIndex,PageSize);

Repeater1.DataBind();

这样完成了页面的分页显示,就简单的几行。

jsp中我要这样:

<jsp:include page="SPage.jsp">

 <jsp:param name="RecordCount" value="<%= RecordCount%>"/>

 <jsp:param name="PageNumConrent" value="<%= PageIndex%>"/>

 <jsp:param name="PageSize" value="<%= PageSize%>"/>

 <jsp:param name="PageName" value="myPage.jsp"/>

 <jsp:param name="ExtraPath" value="<%= "Type=" + myType%>"/>

 </jsp:include>

由于没有代码分离很象面条,但jsp还是很好用的,两者各有各的好处,个人更喜欢asp.netJSF就有点象 asp.net,但好象asp.net先人一步。

Asp.net里的httpmodulejsp里就是filerservlet实现,前端控制器httphandle,  jsp里就是servlet,这两个作为前端控制器和扩展(如: .xxx的访问)。

关于一些基础的架构,目前我还没接触struct,不好说。

 

有趣的JDBC

由于需要,我不得不把SQL防在string里,不用procedure,但对于相当长的SQL,在string里就出现了一些问题,数据库是SQL ServerSQL中用到了很多的在运算时的参数,这在过程里很好实现,CallStatment(name(???))这样,在 SQL Server里参数是这样@Parameter1

我们知道要一一对其,但一些中间直怎么办,@parameter2要使用多次,怎么去对其,开始出现了很多错,同事也协助我,但还是不行,得出的结论是 jdbc不支持,后来我找到方法这样的,以string方式里很简单

declare @par1

set @par1=?

declare @par2

set @par2=?

这样就象使用过程一样了,不过注意对齐。

 

关于哑数据对象还是贫血:

一般情况下一些对象应该有他数据很行为,但有的对象没有行为,这种对象叫哑数据对象,有一个程序是这样的,有很多的没有行为的对象,也就是说只有成员变量和一些getter setter方法,仔细阅读代码可以发现,这些对象在其他的类里面被付直,在一些对象里又被取出,但这些对象都有一个共同点就是要被解析成二径制数组。结果在一个类里就有这样的许多方法:a(A)

b(B)

c(C)

。。。。。

a , b, c分别取得A B C的二径制数组处理而且处理方式都是一样: 解析 发送。我的想法是其实a b c都是一个行为,a b c是一个方法,这些A  B C应该以各自的方式返回自己的二径制表示而不是哑数据对象。

象这样 interface myInterface

{

  getBinaryFormat();

}

 

                 A implements myInterface

{

   getBinaryFormat(){return …};

 

}

 

                 B implements myInterface

{

   getBinaryFormat(){return …};

 

}

                 C implements myInterface

{

   getBinaryFormat(){return …};

 

}

现在a,b,c整合成一个方法:

myMethod(myInterface obj)

{

   data = obj.getBinaryFormat();

   do same work;

}

对过martin flower的东西就知道,以类来封装数据结构然后写一些方法类来处理这种做法是贫血。Pet Shop被认为是一个反面教材,有人重构了,也可以说重写。有很多想法我说不出来,我感觉我的同事很棒,比我牛多了,好好向他们学习。

我的体会以前我是觉得技术为先但现在是业务驱动技术。

 

已经学习设计模式和重构一年了,感触颇深,我仍然孜孜不倦。努力向别人学习。