论坛首页 入门技术论坛

老生常谈:表现逻辑与业务逻辑的分离

浏览 2510 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-17  
     表现逻辑和业务逻辑的分离是老话题了,近日恰好遇到此相关问题,便把自己心得拿来涂鸦.
     表现逻辑和业务逻辑的具体定义不再叙述,我各举一个例子,毕竟具体的例子更容易让人明白.比如,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种方法简化了页面的逻辑,到这里,这篇文章该画句号了,希望对初学者有所帮助,这种肤浅的文章我还是发到入门讨论里好了.
    
     
    
   发表时间:2007-09-17  
你的头像真强!
0 请登录后投票
论坛首页 入门技术版

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