`

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

Web 
阅读更多
     表现逻辑和业务逻辑的分离是老话题了,近日恰好遇到此相关问题,便把自己心得拿来涂鸦.
     表现逻辑和业务逻辑的具体定义不再叙述,我各举一个例子,毕竟具体的例子更容易让人明白.比如,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  
你的头像真强!

相关推荐

    老生常谈javascript中逻辑运算符&&和||的返回值问题

    今天在做逻辑运算符的时候遇到一个小问题一直转不过弯来,var a=(undefined&&123)||(3||5)的返回值是什么? 首先是||的返回值问题: ||的返回值会返回最早遇到非以下类型的值: NaN null undefined 0 false; 所以3||...

    老生常谈外链 站长要做到对症下药.pps

    老生常谈外链 站长要做到对症下药.pps

    老生常谈PHP面向对象之命令模式(必看篇)

    这个模式主要由 命令类、用户请求数据类、业务逻辑类、命令类工厂类及调用类构成,各个类的作用概括如下: 1、命令类:调用用户请求数据类和业务逻辑类; 2、用户请求数据类:获取用户请求数据及保存后台处理后返回...

    开篇:知识体系与小册格局(1).md

    前端性能优化实践# 知识体系与小册格局 ## 写给读者 提起性能优化,大家现在脑海里第一时间会映射出什么内容呢? 可能是类似[“雅虎军规”](https://developer.yahoo.com/performance/rules.html?guccounter=1)和...

    老生常谈PHP中的数据结构:DS扩展

    下面小编就为大家带来一篇老生常谈PHP中的数据结构:DS扩展。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    构建高效的python requests长连接池详解

    老生常谈: python下的httpclient库哪个最好用? 我想大多数人还是会选择requests库的。原因么?也就是简单,易用! 如何蛋疼的构建reqeusts的短连接请求: python requests库默认就是长连接的 (http 1.1, Connection...

    老生常谈Log4j和Log4j2的区别(推荐)

    下面小编就为大家带来老生常谈Log4j和Log4j2的区别(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    老生常谈原生JS执行环境与作用域

    下面小编就为大家带来一篇老生常谈原生JS执行环境与作用域。小编觉得挺不错的,希望对大家有所帮助。一起跟随小编过来看看吧,祝大家游戏愉快哦

    老生常谈onBlur事件与onfocus事件(js)

    下面小编就为大家带来一篇老生常谈onBlur事件与onfocus事件(js)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    老生常谈JavaScript面向对象基础与this指向问题

    下面小编就为大家带来一篇老生常谈JavaScript面向对象基础与this指向问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    北人南观:攻击矩阵中的数据纽带.pdf

    老生常谈 大数据•(业务,威胁,安全) 大数据安全九宫图 威胁用例、威胁场景 攻击假设矩阵,一个简单的工具 矩阵 攻击假设矩阵 @ 网络拓扑,简单示例 攻击假设矩阵 @ 时间,简单示例 数据资产:一种新型资产的认识 “云物...

    电子技术的老生常谈——接地.pdf

    接地是电路设计中最基础的内容,但又是几乎没人说得清的,几乎每次的培训和交流都会有人问到“老师,有没有一种通用的接地方法 可以参考啊?”如果想知道这个问题的答案,请继续耐着性子读下去。

    敏捷软件开发:原则、模式与实践

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    误执行sudo rm -rf /var,重装ubuntu18.04.4配置优化的全过程

    老生常谈 :换源 刚准备换源,系统提示我有软件更新,那就更新呗,果断点击确定,更新完还让我重启( 其四劳紫辽,不管! ) 国外源太慢了,我换国内阿里源 # 使用图形界面换源 软件和更新 &gt;&gt; 下载自 &gt;&gt; 其他站点 &gt;&gt; ...

    老生常谈Python startswith()函数与endswith函数

    下面小编就为大家带来一篇老生常谈Python startswith()函数与endswith函数。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    老生常谈php中传统验证与thinkphp框架(必看篇)

    下面小编就为大家带来一篇老生常谈php中传统验证与thinkphp框架(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics