表现层

  表现层负责向最终用户展示应用程序的控制方式以及数据。它还要负责所有信息的布局和格式。今天,商业应用程序最流行的表现方式应该算是Web前端了,它使用HTML和JavaScript并通 过Web浏览器来满足用户的界面外观需求。

  Web应用程序的优势包括跨平台兼容性、易部署和可扩展。amazon.com就是Web应用程序的—个极好的例子,它允许你在线购书。这就是Web应用程序的一个绝佳应用,因为不可能要求用 户为了买一本书而去下载一个应用程序。

  当需要高级的用户控件或者复杂的数据操纵时,Web应用程序通常就无法胜任了。在这些情况下,使用本机操作系统小部件(如tab、table、treeView和嵌入式对象)的富客户端就体现出了 它的优势。富客户端允许一个强大得多的用户界面,但它往往更难部署,且要达到与Web应用程序相同级别的性能和安全性需要开发人员花费更多的精力。富客户端技术的例子包括Java的Swing等。

  最近,Web应用程序和富客户端这两个概念被混合了起来,形成了所谓的“混合型客户端”, “混合型客户端”试图同时获得Web应用程序和富客户端两者的优点。一些非常小且使用了一些髙级控件的富客户端可能通过Web浏览器被悄悄地下载到用户的桌面。这个混合型的富客户端不包含任何业务逻辑,甚至可能连用户界面的布局都不是内建好的。相反,应用程序的界面外观以 及可用的业务功能都是通过一个Web服务,或者把XML用作客户端与服务器间接口的Web应用程序来配置的。这种方式唯一的缺点就是开发和部署这样的应用程序需要额外的软件。

  接下来当然就有了所谓混合型表现层的典型案例,即Ajax。它曾经是Asynchronous JavaScript and XML (异步JavaScript和XML)的首字母缩写,但现在所有 人都意识到它既不需要异步,也并非只能使用XML,所以现在Ajax代表的仅仅是“一种基于Web 的富客户界面,由大量非常巧妙的JavaScript所驱动”。Ajax是使用旧技术构建内容丰富且交互性强的用户界面的一种新方法。Google很好地检释了Ajax技术,例如在Gmail、Google Maps和Google Calendar这样的应用程序中就充分利用了这种技术。

MyBatis既可用于Web应用程序和富客户端应用程序,也可用于混合型应用程序。虽然表现层通常不会直接与持久化框架“交流”,但用户界面设计时的某些决定还是会影响你对持久层的需 求。举个例子,考虑一个Web应用程序,它需要处理一个包含5000条记录的大型列表。我们不可能需要同时显示出所有这5000条记录,而且如果我们不是立即需要使用它们,那么同时从数据 库中加载这5000条记录也不是什么好主意。一个更好的方案可能是一次只加载和显示10条记录。 这样的话,持久层就需要能够在返回数据的数量上允许一定的灵活性,甚至提供选择和获取我们 希望的10条记录的能力。这样就可以避免不必要的对象创建和数据获取,减少应用程序的网络访 问量和内存需求,进而提高应用程序的性能。MyBatis允许只查询某个特定范围内的数据,这样的 特性就可以帮助我们达到以上这些目的。

业务逻辑层

  应用程序的业务逻辑层描述了应用程序所能提供的“粗粒度”的服务。正是这个原因,业 务逻辑层中的类有时也被称为服务类。从较高的层次来看,任何人都应该能看懂业务逻辑层中的类和方法进而明白系统到底要做什么。举个例子,在一个银行应用程序中,业务逻辑层可能就会包含名为TellerService的类,其中包括像openAccount ()、deposit () withdrawal () 和getBalance()这样的方法。这些都是非常大的功能,涉及复杂的数据库交互甚至可能是与其他系统的交互。这些方法太重了,不适合放在领域类中,否则代码很可能马上就会变得耦合、 并且通常会难以管理。解决方案就是将这些粗粒度的业务方法从与它们相关的业务对象模型中分离出来。这种业务逻辑类与对象模型类的分离有时也被称为“名词与动词的分离''。

  纯面向对象论者可能会说,这样的设计不够面向对象,将业务方法直接放在相关的领域类中才更加面向对象。不论哪种方式更面向对象,能将关注点分离才是一个更好的设计选择。 其中的主要原因还是在于业务方法通常都非常复杂。它们通常都涉及不止一个类,处理不止 一种基础组件这些基础组件可能包括数据库、消息队列和其他系统。更重要的是,一个业务功能往往涉及许多领域类,那么该方法到底应该属于哪个类呢, 的确难以决定。也正是由于这些原因,粗粒度的业务功能最好还是实现为业务逻辑层中某个类的方法。

  不要害怕把那些粒度更细的业务逻辑放到相关的领域类中。业务逻辑层中那些粗粒度的服务 方法可以自由地调用内建在领域类中的细粒度的纯逻辑方法。

  在我们的分层架构中,业务逻辑层是持久层服务的消费者。它调用持久层的方法来获取数据和修改数据。业务逻辑层也是事务定界的最佳场所,因为其中定义的粗粒度业务功能可以供许多 不同的用户界面使用,甚至还可能被像Web服务这样的一些其他接口使用。

系列文章:

MyBatis知多少(1)

MyBatis知多少(2)

MyBatis知多少(3)

MyBatis知多少(4)MyBatis的优势

MyBatis知多少(5)业务对象模型

MyBatis知多少(6)表现层与业务逻辑层的更多相关文章

  1. 9.1.3 .net framework通过业务逻辑层自动生成WebApi的做法

    首先需要说明的是这是.net framework的一个组件,而不是针对.net core的.目前工作比较忙,因此.net core的转换正在编写过程中,有了实现会第一时间贴出来. 接下来进入正题.对于 ...

  2. 在 ASP.NET 中创建数据访问和业务逻辑层(转)

    .NET Framework 4 当在 ASP.NET 中处理数据时,可从使用通用软件模式中受益.其中一种模式是将数据访问代码与控制数据访问或提供其他业务规则的业务逻辑代码分开.在此模式中,这两个层均 ...

  3. HL AsySocket 服务开发框架 - 业务逻辑层

    一 概述 Socket服务只是提供一个网络传输服务. 业务逻辑层在整体架构中的位置在那里呢,如图: 网络层将解包后的消息包抛至业务逻辑层,业务逻辑层收到消息包后,解析消息类型,然后转入相应的处理流程处 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2) ...

  5. JeeSite 4.0 简化业务逻辑层开发

    2019独角兽企业重金招聘Python工程师标准>>> 引言 对于业务逻辑层的开发重复代码很多,尽管有代码生成器,但从代码量总的来说还是比较多,所以就有了以下抽象类及工具,对一些常用 ...

  6. MVC5 网站开发之四 业务逻辑层的架构和基本功能

    业务逻辑层在Ninesky.Core中实现,主要功能封装一些方法通过调用数据存储层,向界面层提供服务.   目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 ...

  7. [Prodinner项目]学习分享_第三部分_Service层(业务逻辑层)

    前两节讲到怎样生成一个Model和怎样将Model映射到数据库,这一节将讲到业务逻辑层,也就是Service层. 1.Prodinner架构已经构建好的,基本的增删改查. 假设,我现在想操作第二节中讲 ...

  8. JSP业务逻辑层

    经典的三层架构:表示层.业务逻辑层和数据访问层 具体的区分方法 1:数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成各个对数据文件的操作.而不必管其他操作. 2:业务逻辑 ...

  9. MVC+Ef项目(4) 抽象业务逻辑层BLL层

    接下来,我们就要到业务逻辑层了,简单的说,业务逻辑层就是调用Repository(可以看做是DAL数据库访问层) 先来看看项目的架构 我们现在就开始来做BLL层.  同样,先编写  UserInfoS ...

随机推荐

  1. 语音直播是否真能让国内网红向“Creator”转变?

    2016年,“直播”.“网红”成为了互联网领域最热门的关键词,一时间整个国内市场涌现出了数百家直播平台,而一些视频网站.新闻客户端.社交平台.电商平台等也纷纷推出直播功能.不仅仅只是创业者们像发了疯似 ...

  2. php header函数详解

    客户机的请求方式格式:是统一资源标识符.协议版本号,后边是MIME信息包括请求修饰符.客户机信息和可能的内容!服务器响应格式:一个状态行包括信息的协议版本号.一个成功或错误的代码,后边是MIME信息包 ...

  3. Python多线程编程之多线程加锁

    Python语言本身是支持多线程的,不像PHP语言. 下面的例子是多个线程做同一批任务,任务总是有task_num个,每次线程做一个任务(print),做完后继续取任务,直到所有任务完成为止. #co ...

  4. 取消vs2013在代码中的Reference数量功能

    继续吐槽.新增的自动统计reference数量的功能: 不爽的是总以为那是一行空行,可是鼠标放上去总是落空,遂我要干掉他. 这玩意有个好处就是有两个版本的程序有小修改的时候(尤其有很多重载方法的调用变 ...

  5. Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入) 转

    http://www.crazyant.net/2011/10/29/linux%E4%B8%8Bgcc%E5%92%8Cmakefile%E5%AE%9E%E4%BE%8B%EF%BC%88%E4% ...

  6. webService发布和调用--Axis2

    一.工具 1.下载 Axis2以及eclipse的Axis2插件.http://axis.apache.org/axis2/java/core/download.cgi 2.axis2-1.7.1-w ...

  7. 参数传递的四种形式----- URL,超链接,js,form表单

    什么时候用GET,  查,删, 什么时候用POST,增,改  (特列:登陆用Post,因为不能让用户名和密码显示在URL上) 4种get传参方式 <html xmlns="http:/ ...

  8. 如何清除朗逸保养提示标志INSP

    自己消除insp小扳手方法 具体步骤如下1.插入钥匙,不要转动.2.按住显示屏下方右边的黑圆柱按钮 3.钥匙转到2档,通电自检,期间按住按钮不要松手4.过10秒左右,INSP消失,小扳手自己去除 不用 ...

  9. 在ps中画两个同心圆并且把两个同心圆进行任意角度切割

    在工作中遇到要在ps中画如图两个同心圆,并且进行6等分.查找资料加自己摸索,可以通过以下方式实现: 1.新建一画布.并用通过标尺画出两条水平和垂直参考线,选择椭圆工具,并在选项设置中选择圆和从中心两个 ...

  10. 正则指引-字符组demo

    class Program { static void Main(string[] args) { string str = "b"; var result1 = Regex.Is ...