`

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

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

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

    正如标题所言,《电子技术的老生常谈——接地》一文中提到的那样,尽管接地的基本概念在每一次培训和交流中都会被提及,但往往缺乏一个通用而全面的方法论指导。本文旨在深入探讨接地的各种类型、目的以及具体的实施...

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

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

    让检测手段转变为推动业务成效的动力

    在传统的企业环境中,存在一系列老生常谈的问题:排障时间过长、根因定位困难、缺乏有效的业务感知、用户体验不佳等。这些问题往往源于传统的标准化思维模式,即过度依赖于既有的规则和流程,而忽略了业务发展的实际...

    老生常谈javascript的面向对象思想

    多态是指允许不同类的对象对同一消息做出响应,表现为不同对象根据相同的消息以不同的方式做出反应。在JavaScript中,多态主要是通过函数重载和方法重写来实现。 JavaScript是一种基于原型的编程语言,这意味着...

    老生常谈ProgressBar、ProgessDialog的用法

    ProgressBar和ProgressDialog是Android开发中常见的两种进度条控件,用于展示任务执行的进度或等待状态。下面我们将深入探讨这两种控件的用法。 首先,ProgressBar是一个可以显示具体进度的组件,它可以是圆形或...

    xilinx coding style

    - **垃圾进垃圾出(Garbage In  Garbage Out)**:这是一句老生常谈的编程术语,意味着差劲的编程代码会产出糟糕的结果。同样的道理,不合理的HDL代码也会导致设计结果不尽人意。 - **从好的HDL设计开始**:要想获得...

    老生常谈的24种Java设计模式

    Java设计模式是在特定环境下,为了解决某类重复出现的问题而总结出来的一套成功或有效的解决方案。这些设计模式旨在提高代码的可重用性、可维护性和可扩展性。 设计模式通常包含以下几个关键要素: ...

    广东省梅州市某重点中学2020学年高二语文下学期期中试题(无答案)粤教版.doc

    题目中提到的“死于非命”、“灭顶之灾”、“老生常谈”、“饮鸩止渴”都是成语,需要学生理解其含义并判断在句子中的使用是否恰当。这涉及到对成语的理解、记忆和应用能力。 3. 病句判断题: 这道题目考查的是语病...

    老生常谈js中的MVC

    JavaScript中的MVC(Model-View-Controller)是一种广泛应用于Web开发的架构模式,它将复杂的交互逻辑分解为三个相互协作的部分:模型、视图和控制器。 1. **模型(Model)**: 模型主要负责存储和管理应用的数据...

    江苏省南通市2020届高三语文上学期教学质量调研试题三含解析

    4. **材料的选择与处理**:第四道题探讨的是写作中的材料选择与安排的重要性,强调即使是老生常谈的话题,通过不同的选择与安排也能创造出新颖的作品,这反映了写作中的创新思维和艺术加工技巧。 综上所述,这段...

    老生常谈ThinkPHP中的行为扩展和插件(推荐)

    通过行为,可以将业务逻辑与核心代码分离,使得系统更加模块化。行为通常需要在配置文件中定义标签与类的对应关系,然后通过监听(listen)或执行(exec)方法来触发具体的业务逻辑处理函数。行为的调用方式主要分为...

    往年省考高频成语汇总【内容详细】

    27. 老生常谈:指陈旧的、听惯了的言论,没有新意。 28. 流风余韵:指前人的文化和风俗习惯流传至今。 29. 名不符实:名声或称号与实际不符。 30. 难能可贵:形容事情虽然很难做到,但做到了非常值得赞扬。 31. ...

    老生常谈android中的事件传递和处理机制

    在Android开发中,事件传递和处理机制是相当关键的一个部分,尤其对于用户界面的交互有着决定性的影响。本文主要探讨了Android系统如何处理触摸事件,通过拟人化的比喻来解释事件传递的流程,并通过实际代码示例进行...

    新北师大版五年级小学语文上册期中考试.docx

    - 老生常谈:常说的老话题,缺乏新意。 - 无稽之谈:毫无根据的说法。 - 劈波斩浪:形容克服困难,勇往直前。 - 万象更新:一切事物都焕然一新。 4. 音节补充完整: - nà mìng 受骗 - zhù fú 祝福 - sh...

    公务员考试常见成语收集.pdf

    80. 老生常谈:老书生经常讲的话,比喻人们听惯了的没有新鲜意思的话。81. 力透纸背:形容书法笔力遒劲,也形容诗文立意深刻,词语精炼。82. 临渊羡鱼:站在深渊边上希望得到鱼。比喻只有愿望而没有实际行动是徒劳的...

    老生常谈js中0到底是 true 还是 false

    总结一下,`0`在JavaScript中作为逻辑值时,它在布尔上下文中的表现取决于其所在的具体情况。在直接转换为布尔值时,`0`是`false`。但在比较操作中,根据比较的另一侧的类型,`0`可能被转换为数字或字符串,导致结果...

Global site tag (gtag.js) - Google Analytics