Layers(层)模式,我想大家应该都不会陌生了。不管是硬件驱动程序、TCP/IP协议,还是J2EE应用软件的架构,层的应用几乎无所不在。我们专注到Web Application上来,三层以及多层结构的应用更是遍地开花。那么,层的强大之处在哪里呢?我们是否真的了解层的划分呢?
我们面对一个复杂问题的时候,都会想着将这个问题化整为零,分为一个个子问题,然后逐个击破。相应的,处理这样复杂问题的软件也会进行划分。通常我们将处理这些子问题的程序称为component(组件)。那么组件或者组件的集合是否就可以称为层呢?在回答这个问题之前,我们先来了解一个概念——Orthogonal Component (正交组件)[1]。
所谓正交组件,就是处理完全不相交问题的软件组件。当你打算将层模式应用到软件设计的时候,就要花心思去搜寻问题中那些不相交的问题,从而为这些问题建立相应的正交组件。只有正交组件之间的关系才能称为层。这样说,似乎有点玄乎,我也说得有点晕眩了。还是说说现实中的例子吧,其实在之前的Post中有提到的Data Accessor和Active Domain Object就可以称作正交组件,Data Accessor主要负责数据库物理访问的细节,并为Active Domain Object提供相应的接口;而Active Domain Object则是为应用程序提供与Domain Object相关的逻辑操作,同时它是利用了Data Accessor提供的抽象接口来完成自己的具体实现的,它对Data Accessor的具体实现是一无所知的。正是基于这样的条件,Data Accessor和Active Domain Object就成为正交组件,并且形成了不同的层,如下图所示:
层模式中的某一层实现并非是最困难的,难就难在层的划分,以下的几个方面都是十分适合在单独层中实现的:
1、数据访问细节:例如Data Accessor;
2、域对象映射:例如Active Domain Object;
3、缓存:例如数据缓存,statement缓存;
4、数据源分布;
5、权限管理;
6、资源管理:例如连接池;
随着层次划分的增多,随之而来的就是复杂性的提高,而且层初始化的成本也会相应的增加。恰到好处的层次划分在层模式的应用尤其重要。
[1] Orthogonal Component
[2] 参考书籍:《数据访问模式——面向对象应用中的数据库交互》
分享到:
相关推荐
6. **Layers(分层)模式**:也称为 Tiers 模式,是一种将应用程序划分为多个独立层的设计方法。每一层都有其特定的功能和职责,层与层之间通过接口进行通信。这种模式提高了系统的模块化程度,有利于团队协作和维护...
- Edit——Layers——Reorder——Renumber:重新排序层,解决显示问题。 - Edit——Move:移动层并进行对齐操作,W键框选,使用+/-和PageUp/PageDown调整大小。 6. 对齐操作: - 使用F键切换到虚线框模式,更...
Layers是一套基于Twitter Bootstrap框架开发的响应式业务销售数据统计后台模板,非常实用的多用途网站后台管理ui界面模板。演示:http://www.sucaihuo.com/templates/3867.html
在本文中,我们将深入探讨如何使用Tensorflow训练一个简单的深度学习模型,特别是在处理自定义数据集,例如这里的猫狗图片分类任务。这个任务虽然规模较小(仅38张图片),但对于初学者来说,是一个很好的实践项目,...
在PyTorch中,LSTM(长短期记忆网络)是一种常用的循环神经网络,适用于处理序列数据,如自然语言。在大型数据集上训练LSTM模型时,为了提高效率,我们通常会利用多GPU进行分布式训练。然而,多GPU训练过程中会遇到...
5. **权限与认证**:为了保护敏感的人力资源数据,`django-layers-hr`集成了Django的权限和认证系统,可以对用户进行角色划分,限制不同角色对数据的访问权限。 6. **集成其他服务**:此外,`django-layers-hr`还...
在使用OpenLayers时,开发者可以创建图层(layers)来叠加不同的地图源,如卫星图像、地形图或者自定义数据。这些图层可以通过JavaScript API动态控制,如显示、隐藏、透明度调整等。与`document.layers`不同,...
- **隐藏层(Hidden Layers)**:可包含多个,负责对输入数据进行复杂转换。隐藏层的层数没有固定限制,传统观点认为一层足够,但现代深度学习则倾向于使用多层。 - **输出层(Output Layer)**:产生最终的预测...
在本文中,我们将深入探讨如何使用Keras库进行深度学习,并以"HelloWorld"项目为例,详细介绍所需的训练和测试数据。Keras是一个高级神经网络API,它构建在TensorFlow、Theano和CNTK等后端之上,为快速实验和开发...
深度学习是一种人工智能领域的核心技术,它模仿人脑神经网络的工作方式,通过多层次的处理来学习数据的复杂表示。Keras是一个高级神经网络API,它构建在TensorFlow、Microsoft Cognitive Toolkit(CNTK)或Theano之...
在JavaScript的早期版本中,`document.layers` 是一个与Netscape Navigator浏览器紧密相关的特性,用于处理网页中的层(layers)布局。这个特性是Netscape Navigator 2.0引入的,目的是为了实现更复杂的页面动态效果...
通过本教程,您将学习如何使用Layers以及Layer Widgets来呈现地理数据,并掌握一些基本的操作技巧。 #### 二、Layers概述 在GEE中,Layers是一种特殊的对象类型,它们用来表示地图上的单个数据集的图形化表示形式。...
标题中的“花分类数据,包含五种花”指的是一个数据集,这个数据集主要用于训练和测试深度学习模型,特别是用于图像分类任务。在这个特定的情况下,数据集包含了五种不同的花卉类型,这使得它成为了一个多类别分类...
"QDataModel_DataModel_layers2me_" 这个标题暗示我们正在讨论一个与Qt框架相关的项目,利用QDataModel来处理数据,并通过某种方式(可能是"layers2me")将这些数据层次化地呈现给用户。QDataModel是Qt库中的一个...
信息安全_数据安全_Peel Back the Layers of Your Ent 用户隐私 网络信息安全 常规渗透 威胁检测 数字取证
GeoServer是一款开源的地理信息系统(GIS)服务器,它允许用户发布、管理和共享地理空间数据。在本教程中,我们将深入探讨如何使用GeoServer发布SHP(Shapefile)格式的地图。Shapefile是GIS领域中广泛使用的矢量...
它接收`input_x`作为输入,`parms`包含模型参数(如隐藏层单元数、是否使用批量归一化和 dropout),以及`mode`(训练模式或预测模式)。隐藏层通过`tf.layers.dense`添加,激活函数为ReLU,`units`定义每个隐藏层的...
而jQuery弹出窗口、模式窗口(Modal Dialogs)和模式层(Modal Layers)是jQuery增强用户体验的重要功能之一。这些功能允许开发者在不离开当前页面的情况下展示信息、进行用户交互或确认操作,极大地提升了网站的...
Photoshop导出图层-Export-Layers-to-Files-Fast-master,Photoshop导出图层-Export-Layers-to-Files-Fast-master,Photoshop导出图层-Export-Layers-to-Files-Fast-master,