在ASP.NET 2.0中操作数据::使用ObjectDataSource展现数据
下载本教程中的编码例子 | 下载本教程的PDF版
导言
在完成了应用程序架构和页面的设计后,我们可以开始探讨如何实现多种多样的普通数据到报表展现的任务。前面我们已经了解到如何在从数据访问层和业务逻辑层绑定数据到ASP.NET页面上的数据控件。在ASP.NET 1.x应用程序中,通过对数据控件的DataSource属性赋值然后调用控件的DataBind()方法从而实现数据展现的方式在ASP.NET 2.0应用程序中可以继续使用。然而,ASP.NET 2.0的数据源控件提供了一种新的方式,使用这些控件可以让你轻松从上文中创建的业务逻辑层中进行数据绑定,甚至不需要手写一行的代码。
ASP.NET 2.0提供了五种内置的数据源控件:SqlDataSource、AccessDataSource,、ObjectDataSource、XmlDataSource、和SiteMapDataSource,尽管如果有需要的话你还可以构建自己的自定义数据源控件(custom data source controls)。既然我们在前文中已经完成了应用程序示例的系统架构,基于已有的业务逻辑类我们将使用ObjectDataSource。
图1: ASP.NET 2.0包括五种内置的数据源控件
ObjectDataSource充当别的对象的代理。通过配置ObjectDataSource,我们指定这些底层的对象,还有这些对象的方法如何映射到ObjectDataSource的Select、Insert、Update和Delete方法。一旦底层的对象被指定并且其方法映射到ObjectDataSource的方法后,我们就可以把ObjectDataSource绑定到页面上的Data Web 服务器控件。ASP.NET提供了许多Data Web 服务器控件,包括GridView、DetailsView、RadioButtonList和DropDownList等等。在页面的生命周期中,Data Web 服务器控件可能需要访问它所绑定的数据,这将通过调用ObjectDataSource的Select方法来实现;如果这个Data Web 服务器控件还支持插入、更新或者删除,那么将调用ObjectDataSource的Insert、Update或者Delete方法。这些调用会通过ObjectDataSource被发送到适当的底层对象的方法,如下图所示。
图2:ObjectDataSource充当一个代理
虽然ObjectDataSource被用来实现插入、更新或者删除数据,但暂时我们只集中讨论返回数据,以后的章节再探讨使用ObjectDataSource和Data Web 服务器控件实现数据修改。
第一步:添加和配置ObjectDataSource控件
首先,打开BasicReporting文件夹中的SimpleDisplay.aspx页面,切换到设计视图,从工具箱拖拽一个ObjectDataSource控件到页面。它在设计界面显示为一个灰色的方块,这是因为它不产生任何的声明标记;它仅仅是通过调用制定的对象的方法存取数据。通过ObjectDataSource返回的数据可以展现到Data Web 服务器控件,例如GridView、DetailsView、FormView等等。
注意: 作为另一种选择,你也可以先在页面上添加一个Data Web 服务器控件,然后“显示智能标记”,从“选择数据源”下拉框中选择〈新建数据源…〉进入数据源配置向导来添加一个ObjectDataSource。
为了指定ObjectDataSource的底层对象并且把该对象的方法映射到ObjectDataSource的的方法,可以点击ObjectDataSource的智能标记中的“配置数据源”链接进入数据源配置向导。
图3: 点击智能标记中的“配置数据源”链接
这将进入数据源配置向导。首先,我们需要给ObjectDataSource指定一个业务对象。如果勾选上“只显示数据组件”,那么下拉框中就仅仅显示出那些以[DataObject]特征修饰过的对象。当前这个列表中应该包含了类型化数据集中表适配器对象(TableAdapters)和前文中我们已经创建的业务对象。如果你忘了给业务逻辑类增加[DataObject]特征,那么当前列表中讲看不到它们。如果是那样的话,你也可以不勾选“只显示数据组件”从而看见所有对象,这就可以把业务对象包含进来(连同类型化数据集中的其他类 –DataTables、 DataRows等等)
在第一屏中从下拉列表中选择业务对象ProductsBLL ,然后点击“下一步”。
图4: 指定ObjectDataSource 控件使用的业务对象
在下一屏中向导中你可以选择ObjectDataSource要调用的方法。下拉列表中方法是从上一屏中选定的业务对象获得的。这里我们可以看到GetProductsByProductID,GetProducts,GetProductsByCategoryID和GetProductsBySupplierID这几个方法。从下拉列表中选择方法GetProducts然后点击“完成”(如果你已经像前文展示那样给ProductBLL的方法增加了[DataObjectMethod]特征,那么该项会被默认选中)。
图5: 从“Select”Tab页选择返回数据的方法
手工配置ObjectDataSource
ObjectDataSource配置向导提供了一个快捷的方式来指定它使用的对象并关联需要调用的方法。不过,你也可以通过它的属性来配置ObjectDataSource,不管是通过属性窗口还是直接在声明标记里。只需简单地将TypeName属性设置为使用的业务对象的名称,将SelectMethod属性设置为提取数据时需要调用的方法名称。
SelectMethod="GetProducts"
TypeName="ProductsBLL">
尽管你可能更喜欢数据源配置向导,但有时你还是需要手工配置ObjectDataSource,因为配置向导只列出已经开发的类。如果你希望把ObjectDataSource绑定到.NET Framework里的类–例如 Membership class来存取登陆用户信息,或者Directory class 来管理文件系统信息,那么你就需要手工设置ObjectDataSource的属性。
第二步:添加一个Data Web服务器控件并将它绑定到ObjectDataSource
在ObjectDataSource添加到页面并完成配置之后,我们就可以添加一个Data Web服务器控件到页面来展现通过ObjectDataSource的Select方法返回的数据。所有的Data Web服务器控件都可以绑定到ObjectDataSource;下面我们看看如何将ObjectDataSource的数据展现到GridView、DetailsView、和 FormView 。
绑定一个GridView到ObjectDataSource
从工具箱添加一个GridView控件到页面SimpleDisplay.aspx的设计界面。从GridView的智能标记,选择我们在第一步中添加的ObjectDataSource控件作为数据源。这将根据ObjectDataSource的Select方法所返回数据的每一个属性(即类型化数据集Products所定义的属性)自动地在GridView控件里产生一个绑定列(BoundField)。
图6: 添加一个GridView控件到页面并绑定到ObjectDataSource
图7: 通过编辑列对话框管理GridView控件的绑定列
花一些时间修改GridView控件的绑定列,移除ProductID, SupplierID, CategoryID, QuantityPerUnit, UnitsInStock, UnitsOnOrder, 和 ReorderLevel这几列。操作很简单,从左下方的列表中选中这些列然后点击删除按钮(红色交叉)就可以移除它们。然后,重新排列一下,选中CategoryName 和 SupplierName两个绑定列并点击向上箭头按钮,使它们排放在UnitPrice列之前。分别设置Products、Category、Supplier和 Price这几个剩下的绑定列的HeaderText属性。然后,格式化Price列为货币–设置该绑定列的HtmlEncode属性为False并且设置DataFormatString属性为{0:c} 。最后,通过ItemStyle/HorizontalAlign属性设置绑定列Price的水平靠右对齐以及CheckBox列Discontinued水平居中显示。
HtmlEncode="False" SortExpression="UnitPrice">
图 8: GridView控件的绑定列定制完成
使用主题(Themes)保持显示风格的一致
这里会尽可能地移除控件层面的样式设置,取而代之的是使用在一个外部文件里定义的级联样式表。文件Styles.css包含了DataWebControlStyle、HeaderStyle、RowStyle和 AlternatingRowStyle 这几种CSS样式可以用来指示Data Web服务器控件的外观。为了实现这一点,我们可以设置GridView控件的CssClass属性为DataWebControlStyle,HeaderStyle、RowStyle和 AlternatingRowStyle的CssClass属性也类似地设置。
如果我们设置了这些CssClass属性到Web控件,那么我们不得不记得明确地把每一个属性的值和每一个Data Web服务器控件记录到我们的手册中。一种更为方便管理的方法是使用一个Theme定义CSS样式跟GridView、 DetailsView和FormView控件的属性之间的关联关系。Theme是一个控件层面的属性设置、图片和CSS样式的集合,它可以应用到整个站点的所有页面强制约束外貌和感观。
我们的Theme将不会包含图片和CSS文件(我们会把stylesheet Styles.css文件照旧留在web应用程序的根目录下),但是它会包含两个外观(Skin)。外观是一个包含Web控件的默认属性设置的文件。特别地,我们将创建一个Skin文件为GridView和 DetailsView定义外观,标示默认的CssClass关联的属性。
在解决方案资源管理器里选中当前项目,从右键菜单中选择“添加新项”,添加一个外观文件到你的项目并命名为GridView.skin 。
图9: 添加一个外观文件并命名为GridView.skin
Skin files need to be placed in a Theme, which are located in the App_Themes folder. Since we don’t yet have such a folder, Visual Studio will kindly offer to create one for us when adding our first Skin. Click Yes to create the App_Theme folder and place the new GridView.skin file there.
外观文件需要被放置到一个主题里,而主题文件则存放在App_Themes文件夹里。因为我们目前还没有这个文件夹,当我们添加第一个外观文件时,Visual Studio会友善地提议为我们创建一个。点击“是”,自动创建App_Theme文件夹并把刚刚添加的GridView.skin文件放置在那里。
图 10: 让Visual Studio自动创建App_Theme文件夹
这将在App_Themes文件夹中自动创建一个主题,主题名称为GridView并包含了外观文件GridView.skin 。
图 11: 主题GridView已被添加到 App_Theme 文件夹
把主题GridView重命名为DataWebControls(从GridView文件夹右键菜单中选择重命名)。然后,进入下面所见的GridView.skin文件的标记:
使用了主题DataWebControls后,这将定义任何一个页面中任何一个GridView控件与CssClass相关属性的默认值。让我们添加一个另一个针对DetailsView控件的外观,这个控件我们不久就会用到。在主题DataWebControls添加一个命名为DetailsView.skin的外观,并加入如下的标记:
关于我们的主题设置,最后一部就是将主题应用到我们的ASP.NET页面。一个主题可以一页一页地应用到页面,也可以应用到一个站点下的所有页面。让我们把主题应用到站点下的所有页面。为了实现这一点,在Web.config的片断里加入下面的标记:
这就顺利完成了!在主题样式表里预设的属性将不会覆盖直接在控件层面设定的属性。如果希望主题里的设置高于控件的设置,则需要在主题样式表里使用主题特征;然而不幸地,主题特征的设置并不出现在Visual Studio 的逻辑视图。查阅 ASP.NET Themes and Skins Overview 和 Server-Side Styles Using Themes 获取更多的关于主题和外观的信息; 查看 How To: Apply ASP.NET Themes 获得更多的关于如何配置页面去使用一个主题的信息。
图 12: The GridView显示 Product’s Name, Category, Supplier, Price, and Discontinued Information
在 DetailsView控件里每次显示一条数据
在GridView控件里,从绑定的数据源控件返回的数据每条记录会被显示为一行。然而有时候,我们仅仅需要显示一条单独的记录,或者每次只显示一条记录。DetailsView控件提供了这个功能,它表现为一个两列的HTML的
,每一行显示一个字段或者一个属性。你可以想象DetailsView是只有一条数据的GridView翻转90度。
首先,在页面SimpleDisplay.aspx里GridView控件的上方添加一个DetailsView控件。然后,把它绑定到GridView的同一个ObjectDataSourc控件。正如GridView控件那样,它会根据ObjectDataSource的Select方法所返回的数据,每一个属性生成一个绑定列。唯一不同的是,DetailsView的绑定列是水平排列的。
图 13: 添加一个DetailsView 控件到页面并绑定到ObjectDataSource
类似GridView,DetailsView的绑定列也可以调整提供一些用户化的展现。图14展示了DetailsView控件在设置好绑定列和CssClass属性后使它的外观类似于GridView的例子。
图 14: DetailsView 控件显示一条记录
注意DetailsView控件只显示它的数据源里的第一条记录。为了让用户可以浏览所有记录,我们必须允许DetailsView分页。为了实现这个,回到Visual Studio,在DetailsView的智能标记中勾选上“启用分页”。
图 15: 允许DetailsView 控件分页
图 16: 启用分页后,DetailsView控件允许用户查看任何一个Products
以后的教程中中我们将详细讨论关于分页。
一种更灵活的排版用作每次显示一条记录
使用DetailView展现ObjectDataSource返回的每一条数据显得有些呆板。我们可能会需要更灵活的数据展现方式。例如,在每一个单独的行里,在显示product’s name, category, supplier, price, 和 discontinued information这些信息的基础上,我们可能需要product name 和 price两列显示
的列头,而category 和 supplier则以较小的字体显示在name和price下方。另外,我们也许不太在意属性名(Product, Category,等等)显示在属性值后面。
FormView控件提供了这个层面的用户化定制。在使用字段的基础上(像GridView 和 DetailsView那样),FormView控件使用模版,这可以让我们混合使用Web服务器控件,静态的HTML和绑定语法(databinding syntax)。如果你熟悉ASP.NET 1.x中的Repeater控件,你可以认为FormView是只显示一条记录的Repeater 。
在页面SimpleDisplay.aspx的设计界面添加一个FormView控件。一开始FromView控件显示为一个灰色的方块,并告知我们需要编辑模版内容,需要使用ItemTemplate 。
图 17: FormView必须包含一个ItemTemplate
你可以通过FormView的智能标记直接给它绑定一个数据源控件,这将自动创建一个默认的ItemTemplate(如果ObjectDataSource设置了InsertMethod 和 UpdateMethod,那么同时也会自动创建EditItemTemplate 和 InsertItemTemplate)。不过,这里的示例我们将手工绑定FormView并设置其ItemTemplate 。首先,设置FormView的DataSourceID属性为ObjectDataSource的ID: ObjectDataSource1,然后,创建ItemTemplate,在一个
里显示product’s name 和 price,category 和 supplier则以较小的字体显示在下方。
<%# Eval("ProductName") %> (<%# Eval("UnitPrice", "{0:c}") %>)
Category: <%# Eval("CategoryName") %>; Supplier: <%# Eval("SupplierName") %>
图 18: 第一个产品 (Chai) 显示为预定的格式
<%# Eval(propertyName) %>是绑定语法。方法Eval返回绑定到FormView的对象的指定属性的值。查阅Alex Homer的文章Simplified and Extended Data Binding Syntax in ASP.NET 2.0获取更多的关于数据绑定的细节。
跟DetailsView一样,FormView置显示ObjectDataSource返回的第一条记录。你可以启用FormView的分页功能,从而让访问者可以依次查看每个产品。
总结
有赖于ASP.NET 2.0的ObjectDataSource控件,我们可以方便地完成从业务逻辑层获取和展现数据而不需要写一行代码。OjbectDataSource调用指定的类的方法并且返回结果。这些结果可以展现在绑定了ObjectDataSource的Data Web服务器控件。本章节我们看了如何绑定到GridView、DetailsView、和FormView 控件到ObjectDataSource 。
到目前为止我们仅仅看了如何使用OjbectDataSource调用一个没有参数的方法,但如果我们想调用一个需要传入多个参数的方法,例如类ProductBLL里的GetProductsByCategoryID(categoryID )方法呢?为了调用需要传入一个或多个参数的方法,我们需要配置ObjectDataSource指定这些参数的值。在下一章中我们来看看如何实现。
祝编程快乐!
附加读物
想了解跟在本教程中讨论过的技术内容相关的更多的信息,请参考下列资源:
· Create Your Own Data Source Controls
· GridView Examples for ASP.NET 2.0
· Simplified and Extended Data Binding Syntax in ASP.NET 2.0
· Themes in ASP.NET 2.0
· Server-Side Styles Using Themes
· How To: Apply ASP.NET Themes Programmatically
作者简介
Scott Mitchell,著有六本ASP/ASP.NET方面的书,是4GuysFromRolla.com的创始人,自1998年以来一直应用微软Web技术。Scott是个独立的技 术咨询顾问,培训师,作家,最近完成了将由Sams出版社出版的新作,24小时内精通ASP.NET 2.0。他的联系电邮为[email protected] ,也可以通过他的博客http://ScottOnWriting.NET与他联系。
你可能感兴趣的:(系统架构)
系统架构设计师——微服务架构
庄隐
# 系统架构设计师 架构 系统架构 微服务 系统架构设计师
概述微服务架构是一种将单一应用程序作为一套小服务的开发方法,每个服务运行在其独立的进程中,并通常围绕特定的业务功能进行构建。这些服务可以通过轻量级的通信协议(如HTTP/JSON)进行交互和数据交换。关键特征:模块化:每个微服务都是独立模块,专注于单一的业务功能,这使得服务更易于理解、开发和维护。独立性:微服务彼此独立,可以在不同的编程语言和平台上实现,增加了技术多样性和灵活性。松耦合:服务之间通
【系统架构设计师】论文:论软件设计模式的应用
数据知道
系统架构设计师(软考高级) 系统架构 设计模式 系统架构设计师 论文 软考高级
论文:论软件设计模式的应用文章目录论文一摘要正文总结论文二摘要正文总结论文三摘要正文总结论文一摘要2022年3月,本人所在公司承担了一项农业系统平台的开发项目,该项目主要是实现农业系统各项内部业务,以及各项农业项目的审批工作,并提供外部用户通过web服务进行信息访问。我在该项目中担任系统架构设计师一职,负责系统的架构设计和软件开发的部分设计工作。本文以该农业系统平台的开发项目为例,主要论述了软件设
ARM与x86:架构对比及其应用
qq_52609913
arm开发 架构
典型的服务器架构的x86采用模块化方法,基于带有可更换组件的主板。CPU和其他组件(如显卡和GPU、内存控制器、存储或处理核心)针对特定功能进行了优化,可以轻松更换或扩展。然而,这种便利是有代价的;这些硬件组件通常是更加同质化的系统架构,这可以让黑客利用“一次编写,随处运行”漏洞快速入侵和攻击系统。基于ARM的处理器则采用了不同的方法。CPU核心不是将处理单元与其余硬件分开,而是作为集成电路物理平
分布式系统架构5:限流设计模式
分布式系统架构5:限流设计模式这是小卷对分布式系统架构学习的第5篇文章,今天来学习限流器和限流设计模式1.为什么要限流?任何一个系统的运算、存储、网络资源都不是无限的,当系统资源不足以支撑外部超过预期的突发流量时,就应该要有取舍,建立面对超额流量自我保护的机制,而这个机制就是微服务中常说的“限流”2.四种限流设计模式说到限流,大家直接的想法就是Sentinel,但是Sentinel限流的原理可能很
基于深度学习的车牌检测识别系统 —— 使用YOLOv5实现车牌检测与识别
2025年数学建模美赛
深度学习 YOLO 人工智能 分类 ui
目录引言项目背景与目标1.1项目背景1.2项目目标系统设计与架构2.1系统功能概述2.2系统架构数据准备与处理3.1数据集选择与收集3.2数据标注3.3数据集划分YOLOv5模型训练与优化4.1YOLOv5配置文件4.2安装YOLOv5并开始训练4.3模型评估与优化车牌识别与推理5.1加载模型进行推理5.2UI界面设计总结与展望引言车牌识别(LicensePlateRecognition,LPR)
2024系统架构师---2021年论文素材
喜欢猪猪
2025---系统架构师 数据库 服务器 运维
企业信息集成是解决“孤岛”问题的需要,技术发展的同时也推动了集成架构等相关的研究。构建企业集成平台的首要目的是实现数据集成,即为平台上运行的各种应用、系统或服务,提供具有完整性、一致性和安全性的数据访问、信息查询及决策支持服务。1、数据集成包括以下3种模式:数据联邦、数据复制和基于接口的数据集成。数据联邦:数据联邦是指不同的应用共同访问一个全局虚拟数据库,通过全局虚拟数据库管理系统为不同的应用提供
分布式微服务系统架构第91集:系统性能指标总结
掘金-我是哪吒
分布式 微服务 系统架构 架构 云原生
加群联系作者vx:xiaoda0423仓库地址:https://webvueblog.github.io/JavaPlusDoc/系统性能指标总结系统性能指标包括哪些?业务指标、资源指标、中间件指标、数据库指标、前端指标、稳定性指标、批量处理指标、可扩展性指标、可靠性指标。1)业务指标:主要包括并发用户数、响应时间、处理能力。响应时间ResponseTime:RT对于在线实时交易:互联网企业:50
Kafka架构
优人ovo
kafka 架构 分布式
引言Kafka凭借其独树一帜的分区架构,在消息中间件领域展现出了卓越的性能表现。其分区架构不仅赋予了Kafka强大的并行计算能力,使其能够高效处理海量数据,还显著提升了系统的容灾能力,确保在复杂的运行环境中始终保持稳定可靠。本文将深入剖析Kafka的架构选型,通过对其底层逻辑的抽丝剥茧,帮助我们提炼架构设计的关键能力与思维模式,进而为优化自身系统架构提供极具价值的参考。消息中间件通用架构生产者功能
【系统架构】架构演进
编程巫师
分布式系统架构 系统架构 架构
系列文章目录第一章系统架构的演进第二章REST风格架构第三章事务处理本篇文章目录系列文章目录前言一、原始分布式二、单体系统时代三、SOA时代烟囱架构微内核架构事件驱动架构四、微服务架构五、后微服务时代六、无服务时代总结前言最近笔者一直在学习系统架构的相关知识,对系统架构的演进过程做了一番归纳整理。我们知道,如今流行的系统架构都不是突然出现的,而是随着互联网的发展,业务复杂度的提升,为了适应各种复杂
基于STM32开发的智能家居灯光控制系统
STM32发烧友
stm32 智能家居 嵌入式硬件
目录引言环境准备工作硬件准备软件安装与配置系统设计系统架构硬件连接代码实现系统初始化灯光控制逻辑传感器数据采集Wi-Fi通信与远程控制应用场景家庭智能灯光管理办公室与商业环境的智能照明常见问题及解决方案常见问题解决方案结论1.引言随着智能家居技术的普及,智能灯光控制系统逐渐成为家庭、办公室和商业环境中提升生活质量和工作效率的重要工具。通过集成STM32微控制器、光照传感器、红外传感器、Wi-Fi模
毕设 基于python的搜索引擎设计与实现
A毕设分享家
python 毕业设计
文章目录0简介1课题简介2系统设计实现2.1总体设计2.2搜索关键流程2.3推荐算法2.4数据流的实现3实现细节3.1系统架构3.2爬取大量网页数据3.3中文分词3.4相关度排序第1个排名算法:根据单词位置进行评分的函数第2个排名算法:根据单词频度进行评价的函数第3个排名算法:根据单词距离进行评价的函数最后0简介今天学长向大家分享一个毕业设计项目毕业设计基于python的搜索引擎设计与实现项目运行
基于Kamailio的VoIP管理系统方案(技术栈:MySQL + Redis + Gin + Vue.js
狂爱代码的码农
VOIP那些事 kamaimio
基于Kamailio的VoIP管理系统方案(技术栈:MySQL+Redis+Gin+Vue.js)1.系统架构核心组件:Kamailio:处理SIP信令、路由、负载均衡、安全过滤。MySQL:存储用户数据、CDR(呼叫记录)、费率规则、系统配置。Redis:缓存用户会话、黑白名单、实时计费锁、高频操作临时数据。Gin(Go语言后端):提供RESTfulAPI,处理业务逻辑和数据库交互。Vue.js
LabVIEW的智能电源远程监控系统开发
LabVIEW开发
LabVIEW开发案例 LabVIEW开发案例
在工业自动化与测试领域,电源设备的精准控制与远程管理是保障系统稳定运行的核心需求。传统电源管理依赖本地手动操作,存在响应滞后、参数调节效率低、无法实时监控等问题。通过集成工业物联网(IIoT)技术,实现电源设备的智能化运维,满足航空航天、新能源电池测试等场景的严苛要求。系统架构与LabVIEW核心功能1.硬件配置可编程电源:支持SCPI指令的KeysightN6705C直流电源(0-60V/0-2
Java程序设计(三十九):基于SSM框架的每日健康管理系统的实现与数据分析
人工智能_SYBH
2025年java程序设计 java 数据分析 开发语言 微信小程序 notepad++ 程序设计 数据挖掘
目录引言系统需求分析2.1功能需求2.2非功能需求系统架构设计3.1技术栈3.2系统架构图数据库设计系统实现5.1后端实现5.1.1Spring配置5.1.2控制器实现5.1.3服务层与DAO层实现5.2前端实现5.2.1页面设计5.2.2AJAX请求实现数据分析与可视化创新点与未来展望总结引言随着社会的进步与人们健康意识的提升,健康管理成为了越来越重要的主题。本文介绍了一种基于SSM框架的每日健
自然语言生成(NLG)算法模型评估方案的硬件配置、系统架构设计、软件技术栈、实现流程和关键代码
weixin_30777913
人工智能 算法 系统架构 自然语言处理
智能化对话中的自然语言生成(NLG)算法模型评估是一个复杂而多维的过程,它涉及多个评估指标和策略,以确保生成的文本质量、准确性和流畅性。智能化对话中的NLG算法模型评估是一个涉及多个评估指标和策略的过程。通过选择合适的评估指标和策略,可以全面、客观地评估模型的性能和表现,为模型的优化和改进提供有力支持。以下是对NLG算法模型评估的详细论述及举例说明:一、评估指标准确性:•关注模型生成的语言内容是否
短视频推荐系统架构设计:从召回、排序到冷启动的全链路解析
热爱分享的博士僧
系统架构
短视频推荐系统的设计是一个复杂的过程,涉及到从内容召回、排序到解决冷启动问题的多个环节。下面将对这一过程进行全链路解析。1.召回阶段召回是推荐系统的第一个步骤,目的是从海量的内容库中快速筛选出可能感兴趣的候选集供用户查看。常见的召回策略包括:基于流行度的召回:根据视频的观看次数、点赞数、分享数等指标来选择热门内容。协同过滤召回:利用用户行为数据(如浏览历史、点赞、评论等),找到与当前用户兴趣相似的
ROS发行版
虎啸~嘤嘤嘤
机器人 自动驾驶 人工智能
ROS是一个用于机器人软件开发的灵活框架,它支持多种编程语言,并且其不同的版本(称为“发行版”)提供了不同的特性和兼容性。foxy是ROS2的一个发行版名称。ROS2是ROS的一个新版本,它引入了新的通信机制(如DDS,DataDistributionService)、更好的系统架构和更多的现代编程语言支持(如C++11、Python3等)。foxy是在特定时间点上发布的ROS2的一个版本,它包含
第28节课:前端项目实战—从需求分析到开发流程的全方位指南
学问小小谢
HTML学习笔记 前端 需求分析 安全 web安全 网络 性能优化 html5
目录项目需求分析与设计项目背景与目标项目背景项目目标需求收集与分析用户需求业务需求项目设计技术栈选择系统架构设计数据库设计项目开发流程环境搭建安装Node.js和npm初始化项目编码实践组件化开发状态管理测试与调试单元测试集成测试部署与维护部署维护结语在前端开发领域,将理论知识应用于实际项目是提升技能的关键。本节课将通过一个完整的前端项目实战案例,详细介绍项目需求分析与设计,以及项目开发流程,帮助
博客建站7 - hexo博客独立服务器如何自动部署?
c++
1.本网站的系统架构2.安装git3.配置git用户3.1.为什么要创建git用户3.2.创建git用户3.3.设置git用户的密码3.4.创建公钥-私钥对3.5.服务器配置公钥4.hexo配置自动化部署4.1.配置Git仓库4.2.hexo站点配置1.本网站的系统架构网站示例:sunlogging.com服务器:阿里云ECS服务器系统:Ubuntu24.04LTS博客框架:Hexo网站主题:Vo
一文搞懂SaaS架构建设流程:业务战略设计、架构蓝图设计、领域系统架构设计、架构治理与实施
公众号-AI架构师汤师爷
后端 架构设计 Java SaaS
大家好,我是汤师爷~SaaS架构建设是一项复杂的系统工程,不仅需要技术层面的实现,更要从业务战略、架构设计、治理与实施等多个维度进行全面规划。一个成功的SaaS架构可以帮助企业降低IT成本、提升业务灵活性、加快创新步伐,并为客户带来更优质的服务体验。本章将详细介绍SaaS架构建设的各个关键阶段,从战略规划到具体实施,为读者提供完整的架构建设指南。SaaS架构建设流程SaaS架构建设是一个复杂且系统
SaaS架构设计
frank3G
框架相关 saas 架构设计 数据库 应用服务器 session 扩展
对于SaaS应用的可伸缩,最理想的情况:随着用户数的增大,系统架构不用做调整,而仅需要增加/增强相应的硬件设备(应用服务器、数据库服务器)即可。而通常强调的应用架构具有可伸缩性,一般指的是可以实现”Scaleout”,即水平扩展或者向外扩展。而”Scaleup”通常为垂直扩展或者向上扩展,也就是增强硬件设备,这种方式几乎是任何应用架构普遍适用的,但是通常都会面临高成本的问题。1、应用服务器层的水平
星际智慧农业系统(SAS),智慧农业的未来篇章
暮雨哀尘
新月篇 python 数据结构 pandas flask json 前端 后端
新月人物传记:人物传记之新月篇-CSDN博客相关文章:星际战争模拟系统:新月的编程之道-CSDN博客新月智能护甲系统CMIA--未来战场的守护者-CSDN博客“新月智能武器系统”CIWS,开启智能武器的新纪元-CSDN博客目录星际智慧农业系统(StellarAgriTechSystem)说明手册一、系统概述二、系统架构三、模块说明四、系统运行说明五、系统优化建议六、常见问题解答七、技术支持星际智慧
分布式系统架构设计原理与实战:分布式缓存的设计与实现
AI天才研究院
计算 计算 大数据 人工智能 语言模型 AI 大模型 LLM Java Python 架构设计 Agent RPA
1.背景介绍分布式系统架构设计原理与实战:分布式缓存的设计与实现作者:禅与计算机程序设计艺术背景介绍1.1分布式系统的基本概念分布式系统是指由多个autonomouscomputer组成,这些computer通过网络相互协作来完成共同的task。它允许multiplecomputers在同一个时间访问sharedresources,同时保证systemconsistency。1.2什么是分布式缓存
5G核心网网络功能和架构
黄健宁柳职2301_79495152
5G 网络
5G系统架构主要包含三个部分:用户面、控制面和管理面。用户面:5G系统的用户面主要包括基站、无线访问网和核心网。其中,基站负责无线信号的转换和承载;无线访问网则负责无线信号的传输和覆盖;核心网则是整个5G网络的核心,提供基本的网络控制和管理功能。控制面:5G系统的控制面主要由基站和核心网两部分组成。基站控制面主要负责控制用户的接入和移动性管理;核心网控制面则负责整个5G网络的连接管理、流量控制和安
系统架构师(二)案例题
新新许愿树
# 系统架构师 职场和发展
目录一、软件结构设计(一)软件质量属性(二)风险,敏感点,权衡点二、结构化软件系统建模(一)流程图和数据流图(二)实体和类的区别(三)EssentialUseCases和RealUseCases(四)状态图和活动图(五)用例建模三、软件系统架构选择(一)能写的架构风格-论文(二)什么是软件架构风格,面向对象和控制环路两种架构各自风格的特点(三)主程序-子程序和管道-过滤器这两种架构风格的特点(四)
ROS2总体架构
听风胖耗子
架构 机器人
ROS2框架从系统架构上,ROS2可以划分为三层:应用层(ApplicationLayer)、中间层(MiddlewareLayer)、操作系统层(OSLayer)。应用层是指开发者构建的应用程序,应用程序中是以功能包为核心的,在功能包中可以包含源码、数据定义、接口等内容;中间层主要由数据分发服务DDS与ROS2封装的关于机器人开发的中间件组成,DDS是一种去中心化的数据通讯方式,它引入了服务质量
光纤通信系统架构
柠檬芭乐绿
网络 信息与通信
#学习笔记系统架构光纤通信系统是一种利用光作为载波,通过光纤作为传输媒介来传输信息的通信系统。传输系统基本组成:信号发射端、传输光纤、光纤放大器、接收端信号解调一、信号发射端信号发射端是光纤通信系统的起点,主要负责将电信号转换为光信号,以便在光纤中传输。其主要组成部分包括:光源:光源是光纤通信系统的起点,负责产生光信号。常用的光源有激光器(如半导体激光器LD、垂直腔面发射激光器VCSELs、光纤激
Mac 安装Mysql启动Mysql以及数据库的常规操作
荆州克莱
面试题汇总与解析 spring cloud spring boot spring 技术 css3
Mac安装Mysql启动Mysql以及数据库的常规操作一、mysql的安装1、登录官方网站:dev.mysql.com/downloads/mysql/二、查看系统架构```uname-m```在MAC中:如果输出结果是x86_64,则表示你的系统是x86-64架构。如果输出结果是arm64,则表示你的系统是arm64架构。根据自身系统架构进行下载安装2、安装完成打开系统设置3、安全模式启动```
海思媒体处理平台架构分析
海思平台记录 linux 嵌入式
1.系统架构编辑2.海思媒体处理平台架构编辑主要分为:视频输入(VI):VI模块捕获视频图像,可对其做剪切、去噪等处理,并输出多路不同分辨率的图像数据。视频处理(VPSS):VPSS模块接收VI和解码模块发送过来的图像,可对图像进行图像增强、锐化等处理,并实现同源输出多路不同分辨率的图像数据用于编码、预览或抓拍。视频编码(VENC):编码模块接收VI捕获并经VPSS处理后输出的图像数据,可叠加用户
分布式微服务系统架构第89集:kafka消费者
掘金-我是哪吒
分布式 微服务 系统架构 kafka 架构
那么消费者是如何提交偏移量的呢?消费者往一个叫作_consumer_offset的特殊主题发送消息,消息里包含每个分区的偏移量。如果消费者一直处于运行状态,那么偏移量就没有什么用处。不过,如果消费者发生崩溃或者有新的消费者加入群组,就会触发再均衡,完成再均衡之后,每个消费者可能分配到新的分区,而不是之前处理的那个。为了能够继续之前的工作,消费者需要读取每个分区最后一次提交的偏移量,然后从偏移量指定
项目中 枚举与注解的结合使用
飞翔的马甲
java enum annotation
前言:版本兼容,一直是迭代开发头疼的事,最近新版本加上了支持新题型,如果新创建一份问卷包含了新题型,那旧版本客户端就不支持,如果新创建的问卷不包含新题型,那么新旧客户端都支持。这里面我们通过给问卷类型枚举增加自定义注解的方式完成。顺便巩固下枚举与注解。
一、枚举
1.在创建枚举类的时候,该类已继承java.lang.Enum类,所以自定义枚举类无法继承别的类,但可以实现接口。
【Scala十七】Scala核心十一:下划线_的用法
bit1129
scala
下划线_在Scala中广泛应用,_的基本含义是作为占位符使用。_在使用时是出问题非常多的地方,本文将不断完善_的使用场景以及所表达的含义
1. 在高阶函数中使用
scala> val list = List(-3,8,7,9)
list: List[Int] = List(-3, 8, 7, 9)
scala> list.filter(_ > 7)
r
web缓存基础:术语、http报头和缓存策略
dalan_123
Web
对于很多人来说,去访问某一个站点,若是该站点能够提供智能化的内容缓存来提高用户体验,那么最终该站点的访问者将络绎不绝。缓存或者对之前的请求临时存储,是http协议实现中最核心的内容分发策略之一。分发路径中的组件均可以缓存内容来加速后续的请求,这是受控于对该内容所声明的缓存策略。接下来将讨web内容缓存策略的基本概念,具体包括如如何选择缓存策略以保证互联网范围内的缓存能够正确处理的您的内容,并谈论下
crontab 问题
周凡杨
linux crontab unix
一: 0481-079 Reached a symbol that is not expected.
背景:
*/5 * * * * /usr/IBMIHS/rsync.sh
让tomcat支持2级域名共享session
g21121
session
tomcat默认情况下是不支持2级域名共享session的,所有有些情况下登陆后从主域名跳转到子域名会发生链接session不相同的情况,但是只需修改几处配置就可以了。
打开tomcat下conf下context.xml文件
找到Context标签,修改为如下内容
如果你的域名是www.test.com
<Context sessionCookiePath="/path&q
web报表工具FineReport常用函数的用法总结(数学和三角函数)
老A不折腾
Web finereport 总结
ABS
ABS(number):返回指定数字的绝对值。绝对值是指没有正负符号的数值。
Number:需要求出绝对值的任意实数。
示例:
ABS(-1.5)等于1.5。
ABS(0)等于0。
ABS(2.5)等于2.5。
ACOS
ACOS(number):返回指定数值的反余弦值。反余弦值为一个角度,返回角度以弧度形式表示。
Number:需要返回角
linux 启动java进程 sh文件
墙头上一根草
linux shell jar
#!/bin/bash
#初始化服务器的进程PId变量
user_pid=0;
robot_pid=0;
loadlort_pid=0;
gateway_pid=0;
#########
#检查相关服务器是否启动成功
#说明:
#使用JDK自带的JPS命令及grep命令组合,准确查找pid
#jps 加 l 参数,表示显示java的完整包路径
#使用awk,分割出pid
我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory
aijuans
Spring 3 系列
如何使用ApplicationContext替换BeanFactory?
package onlyfun.caterpillar.device;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import
Linux 内存使用方法详细解析
annan211
linux 内存 Linux内存解析
来源 http://blog.jobbole.com/45748/
我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。
一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。
Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用
数据库的单表查询常用命令及使用方法(-)
百合不是茶
oracle 函数 单表查询
创建数据库;
--建表
create table bloguser(username varchar2(20),userage number(10),usersex char(2));
创建bloguser表,里面有三个字段
&nbs
多线程基础知识
bijian1013
java 多线程 thread java多线程
一.进程和线程
进程就是一个在内存中独立运行的程序,有自己的地址空间。如正在运行的写字板程序就是一个进程。
“多任务”:指操作系统能同时运行多个进程(程序)。如WINDOWS系统可以同时运行写字板程序、画图程序、WORD、Eclipse等。
线程:是进程内部单一的一个顺序控制流。
线程和进程
a. 每个进程都有独立的
fastjson简单使用实例
bijian1013
fastjson
一.简介
阿里巴巴fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库;包括“序列化”和“反序列化”两部分,它具备如下特征:  
【RPC框架Burlap】Spring集成Burlap
bit1129
spring
Burlap和Hessian同属于codehaus的RPC调用框架,但是Burlap已经几年不更新,所以Spring在4.0里已经将Burlap的支持置为Deprecated,所以在选择RPC框架时,不应该考虑Burlap了。
这篇文章还是记录下Burlap的用法吧,主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成
 
【Mahout一】基于Mahout 命令参数含义
bit1129
Mahout
1. mahout seqdirectory
$ mahout seqdirectory
--input (-i) input Path to job input directory(原始文本文件).
--output (-o) output The directory pathna
linux使用flock文件锁解决脚本重复执行问题
ronin47
linux lock 重复执行
linux的crontab命令,可以定时执行操作,最小周期是每分钟执行一次。关于crontab实现每秒执行可参考我之前的文章《linux crontab 实现每秒执行》现在有个问题,如果设定了任务每分钟执行一次,但有可能一分钟内任务并没有执行完成,这时系统会再执行任务。导致两个相同的任务在执行。
例如:
<?
//
test
.php
java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
bylijinnan
java
public class OcuppyMoreThanHalf {
/**
* Q74 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
* two solutions:
* 1.O(n)
* see <beauty of coding>--每次删除两个不同的数字,不改变数组的特性
* 2.O(nlogn)
* 排序。中间
linux 系统相关命令
candiio
linux
系统参数
cat /proc/cpuinfo cpu相关参数
cat /proc/meminfo 内存相关参数
cat /proc/loadavg 负载情况
性能参数
1)top
M:按内存使用排序
P:按CPU占用排序
1:显示各CPU的使用情况
k:kill进程
o:更多排序规则
回车:刷新数据
2)ulimit
ulimit -a:显示本用户的系统限制参
[经营与资产]保持独立性和稳定性对于软件开发的重要意义
comsci
软件开发
一个软件的架构从诞生到成熟,中间要经过很多次的修正和改造
如果在这个过程中,外界的其它行业的资本不断的介入这种软件架构的升级过程中
那么软件开发者原有的设计思想和开发路线
在CentOS5.5上编译OpenJDK6
Cwind
linux OpenJDK
几番周折终于在自己的CentOS5.5上编译成功了OpenJDK6,将编译过程和遇到的问题作一简要记录,备查。
0. OpenJDK介绍
OpenJDK是Sun(现Oracle)公司发布的基于GPL许可的Java平台的实现。其优点:
1、它的核心代码与同时期Sun(-> Oracle)的产品版基本上是一样的,血统纯正,不用担心性能问题,也基本上没什么兼容性问题;(代码上最主要的差异是
java乱码问题
dashuaifu
java乱码问题 js中文乱码
swfupload上传文件参数值为中文传递到后台接收中文乱码 在js中用setPostParams({"tag" : encodeURI( document.getElementByIdx_x("filetag").value,"utf-8")});
然后在servlet中String t
cygwin很多命令显示command not found的解决办法
dcj3sjt126com
cygwin
cygwin很多命令显示command not found的解决办法
修改cygwin.BAT文件如下
@echo off
D:
set CYGWIN=tty notitle glob
set PATH=%PATH%;d:\cygwin\bin;d:\cygwin\sbin;d:\cygwin\usr\bin;d:\cygwin\usr\sbin;d:\cygwin\us
[介绍]从 Yii 1.1 升级
dcj3sjt126com
PHP yii2
2.0 版框架是完全重写的,在 1.1 和 2.0 两个版本之间存在相当多差异。因此从 1.1 版升级并不像小版本间的跨越那么简单,通过本指南你将会了解两个版本间主要的不同之处。
如果你之前没有用过 Yii 1.1,可以跳过本章,直接从"入门篇"开始读起。
请注意,Yii 2.0 引入了很多本章并没有涉及到的新功能。强烈建议你通读整部权威指南来了解所有新特性。这样有可能会发
Linux SSH免登录配置总结
eksliang
ssh-keygen Linux SSH免登录认证 Linux SSH互信
转载请出自出处:http://eksliang.iteye.com/blog/2187265 一、原理
我们使用ssh-keygen在ServerA上生成私钥跟公钥,将生成的公钥拷贝到远程机器ServerB上后,就可以使用ssh命令无需密码登录到另外一台机器ServerB上。
生成公钥与私钥有两种加密方式,第一种是
手势滑动销毁Activity
gundumw100
android
老是效仿ios,做android的真悲催!
有需求:需要手势滑动销毁一个Activity
怎么办尼?自己写?
不用~,网上先问一下百度。
结果:
http://blog.csdn.net/xiaanming/article/details/20934541
首先将你需要的Activity继承SwipeBackActivity,它会在你的布局根目录新增一层SwipeBackLay
JavaScript变换表格边框颜色
ini
JavaScript html Web html5 css
效果查看:http://hovertree.com/texiao/js/2.htm代码如下,保存到HTML文件也可以查看效果:
<html>
<head>
<meta charset="utf-8">
<title>表格边框变换颜色代码-何问起</title>
</head>
<body&
Kafka Rest : Confluent
kane_xie
kafka REST confluent
最近拿到一个kafka rest的需求,但kafka暂时还没有提供rest api(应该是有在开发中,毕竟rest这么火),上网搜了一下,找到一个Confluent Platform,本文简单介绍一下安装。
这里插一句,给大家推荐一个九尾搜索,原名叫谷粉SOSO,不想fanqiang谷歌的可以用这个。以前在外企用谷歌用习惯了,出来之后用度娘搜技术问题,那匹配度简直感人。
环境声明:Ubu
Calender不是单例
men4661273
单例 Calender
在我们使用Calender的时候,使用过Calendar.getInstance()来获取一个日期类的对象,这种方式跟单例的获取方式一样,那么它到底是不是单例呢,如果是单例的话,一个对象修改内容之后,另外一个线程中的数据不久乱套了吗?从试验以及源码中可以得出,Calendar不是单例。
测试:
Calendar c1 =
线程内存和主内存之间联系
qifeifei
java thread
1, java多线程共享主内存中变量的时候,一共会经过几个阶段,
lock:将主内存中的变量锁定,为一个线程所独占。
unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量。
read:将主内存中的变量值读到工作内存当中。
load:将read读取的值保存到工作内存中的变量副本中。
schedule和scheduleAtFixedRate
tangqi609567707
java timer schedule
原文地址:http://blog.csdn.net/weidan1121/article/details/527307
import java.util.Timer;import java.util.TimerTask;import java.util.Date;
/** * @author vincent */public class TimerTest {
 
erlang 部署
wudixiaotie
erlang
1.如果在启动节点的时候报这个错 :
{"init terminating in do_boot",{'cannot load',elf_format,get_files}}
则需要在reltool.config中加入
{app, hipe, [{incl_cond, exclude}]},
2.当generate时,遇到:
ERROR