我的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.net,JSF就有点象 asp.net,但好象asp.net先人一步。
Asp.net里的httpmodule在jsp里就是filer用servlet实现,前端控制器httphandle, jsp里就是servlet,这两个作为前端控制器和扩展(如: .xxx的访问)。
关于一些基础的架构,目前我还没接触struct,不好说。
有趣的JDBC:
由于需要,我不得不把SQL防在string里,不用procedure,但对于相当长的SQL,在string里就出现了一些问题,数据库是SQL Server,SQL中用到了很多的在运算时的参数,这在过程里很好实现,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被认为是一个反面教材,有人重构了,也可以说重写。有很多想法我说不出来,我感觉我的同事很棒,比我牛多了,好好向他们学习。
我的体会以前我是觉得技术为先但现在是业务驱动技术。
已经学习设计模式和重构一年了,感触颇深,我仍然孜孜不倦。努力向别人学习。
浙公网安备 33010602011771号