首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

陈词滥调:表现逻辑与业务逻辑的分离

2012-10-30 
老生常谈:表现逻辑与业务逻辑的分离表现逻辑和业务逻辑的分离是老话题了,近日恰好遇到此相关问题,便把自己

老生常谈:表现逻辑与业务逻辑的分离
     表现逻辑和业务逻辑的分离是老话题了,近日恰好遇到此相关问题,便把自己心得拿来涂鸦.
     表现逻辑和业务逻辑的具体定义不再叙述,我各举一个例子,毕竟具体的例子更容易让人明白.比如,web页面上要显示新闻的列表,要求奇数行显示为红色,偶数行显示为白色,这样的就是表现逻辑;再看这样的需求:web页面上列出用户的头像和用户名,头像和用户名都有超连接,连接到用户的个人主页,连接地址是http://www.xx.com/user/125或者http://www.xx.com/user/robin/,也就是如果用户有用户名,则用用户名为地址,否则就用其id为地址.这样的逻辑可以算业务逻辑.其实有时候业务逻辑和表现逻辑是很难明确区分的,更多的时候需要经验.
      认清了业务逻辑和表现逻辑,我们就要使她们分离.要做到分离,就要在视图层只写表现逻辑,而把业务逻辑放到业务层代码里去实现.对于上面例子中的需求2有两种方法来实现,一种是不分离的,一种是分离的,如下(我就用veloctiy的语法写吧):
假设resultList里是用户对象TUser,里面有name 和id等属性.    
第一种(没分离的):

     #foreach($result in $resultList)       #if($result.name != '')         <a href="/user/$result.name">$!result.name</a>       #else         <a href="/user/$result.id">$!result.id</a>       #end     #end

第二种(分离的):
先在TUser中写个方法,叫getLink(),代码如下:
public String getLink(){   if(!this.name.equals(""))   {      return this.name;   }else   {      return this.id.toString();   }}

再看web页面的实现:
     #foreach($result in $resultList)       <a href="/user/$result.link">$!result.name</a>     #end

    显然第2种方法简化了页面的逻辑,到这里,这篇文章该画句号了,希望对初学者有所帮助,这种肤浅的文章我还是发到入门讨论里好了.
    
     
     1 楼 lijie250 2007-09-17   你的头像真强!

热点排行