在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与他联系。
你可能感兴趣的:(系统架构)
带你详解B/S和C/S系统架构分析
于弋gg
系统架构 服务器 servlet
系统架构分析关于系统架构1.系统架构包括什么形式?C/S架构B/S架构2.C/S架构是什么?-用户在本地安装客户端,通过网络与服务器相互通信。Client/Server(客户端/服务器)C/S架构的软件或者系统有哪些呢?QQ微信C/S架构的特点:需要安装特定的客户端软件C/S架构的优先和缺点分别是什么?优点:用户端程序一致,方便控制速度快,体验好,界面炫酷服务器压力小,安全解释以下:比如魔兽世界,
【系统架构设计】设计模式
傻傻虎虎
系统架构设计 系统架构 设计模式
【系统架构设计】设计模式设计模式概述GoF设计模式FactoryMethodAbstractFactory(*)BuilderPrototype(原型)Singleton(*)AdapterBridgeComposite(组合)Decorator(装饰)(*)Facade(外观)(*)Flyweight(享元)ProxyInterpreter(解释器)TemplateMethodChainofRe
系统架构分析
冰冰在努力
企业级技术 系统架构 c# asp.net .netcore .net
一、速通一图流二、系统架构功能、作用分析1.Furion:框架核心层功能:这是Furion框架的核心层,通常包含框架本身的基本功能和配置。这一层应该是比较稳定的,不应该包含业务逻辑,而是提供项目其他部分需要依赖的基础设施功能。作用:为整个应用程序提供通用的功能支持和框架级别的配置。例如,依赖注入配置、全局异常处理、日志管理等。2.Furion.Application:业务应用层功能:这一层主要负责
SpringBoot+Vue疫苗接种管理系统 预约接种疫苗管理系统 疫苗接种查询系统Java
计算机程序老哥
作者主页:计算机毕业设计老哥有问题可以主页问我一、开发介绍1.1开发环境开发语言:Java数据库:MySQL系统架构:B/S后端:SpringBoot(Spring+SpringMVC+Mybatis)前端:Vue工具:IDEA或者Eclipse,JDK1.8,Maven二、系统介绍2.1图片展示注册登录页面:登陆.png前端页面功能:首页、疫苗信息、健康科普、疫苗资讯、个人中心、后台管理、咨询服
基于STM32开发的智能语音控制系统
stm32发烧友
stm32 嵌入式硬件 单片机
目录引言环境准备工作硬件准备软件安装与配置系统设计系统架构硬件连接代码实现系统初始化语音识别与指令处理控制设备OLED显示与状态提示Wi-Fi通信与远程监控应用场景家庭环境中的智能语音控制办公环境中的语音交互常见问题及解决方案常见问题解决方案结论1.引言随着智能家居的发展,语音控制成为了人机交互的重要方式。本文将介绍如何使用STM32微控制器开发一个智能语音控制系统,通过语音识别模块、OLED显示
汽车功能安全(ISO 26262)系列_ 硬件开发 - 硬件安全需求,安全设计及安全机制
adas_l5
汽车 安全 自动驾驶 功能安全 ISO26262 硬件开发 安全设计
汽车功能安全(ISO26262)系列:硬件开发-硬件安全需求,安全设计及安全机制在系统开发阶段,我们细化了功能安全需求FSR,得到了技术层面可实施的技术安全需求TSR,并将其分配至系统架构中的硬件(HW)和软件(SW)组件,接下来就需要根据硬件相关的TSR进行硬件安全相关的开发。硬件开发属于ISO26262第5部分内容,同样基于V开发模型,即始于需求开发,然后架构设计,详细实现,最后完成集成和验证
设计模式反模式:UML图示常见误用案例分析
hai40587
设计模式 uml
设计模式反模式:UML图示常见误用案例分析在软件开发过程中,设计模式(DesignPatterns)作为解决常见设计问题的最佳实践,被广泛地应用于提升代码质量和系统可维护性。然而,当这些设计模式被误用或滥用时,它们可能会转变为反模式(Anti-Patterns),导致系统架构的复杂性增加,甚至引发一系列问题。特别是在使用UML(统一建模语言)图示时,这些误用表现得尤为明显。本文将通过几个具体的案例
基于STM32开发的智能垃圾桶系统
嵌入式详谈
stm32 嵌入式硬件 单片机
目录引言环境准备工作硬件准备软件安装与配置系统设计系统架构硬件连接代码实现系统初始化超声波传感器检测与垃圾桶开关控制状态显示与声音提示Wi-Fi通信与满溢通知应用场景家庭环境的智能垃圾桶管理办公室与公共场所的智能垃圾处理常见问题及解决方案常见问题解决方案结论1.引言随着智能家居设备的不断发展,智能垃圾桶逐渐成为提升生活质量和便利性的重要工具。智能垃圾桶系统可以通过传感器检测垃圾桶的使用情况,自动开
基于STM32开发的智能家居语音控制系统
嵌入式详谈
stm32 智能家居 嵌入式硬件
目录引言环境准备工作硬件准备软件安装与配置系统设计系统架构硬件连接代码实现系统初始化语音识别处理设备控制与状态显示Wi-Fi通信与远程控制应用场景家庭环境的语音控制办公室的智能化管理常见问题及解决方案常见问题解决方案结论1.引言随着人工智能技术的发展,智能家居设备逐渐普及。通过语音识别技术,用户可以通过简单的语音指令控制家中的设备,如灯光、空调、电视等,提升生活的便利性和舒适性。本文将介绍如何使用
系统架构师考试学习笔记第二篇——架构设计专业知识(4)信息系统基础知识
SheldonK
软件架构师学习分享 系统架构 学习 笔记
本课时主要学习信息系统概述、信息化的典型应用、典型信息系统架构模型等内容。本课时内容属于基础知识范畴,根据考试大纲及以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,本小时知识点会涉及单项选择题,约占2~6分,本小时知识架构如图4.1所示。一、信息系统概述1.信息系统的定义信息系统是由计算机软硬件、网络和通信设备、信息资源、用户和规章制度组成的以处理信息流为目的的人机一体化系统。信息系统
讲解如何使用RAG(检索增强生成)和LLM(大语言模型)来构建一个法律咨询网站。
winfredzhang
语言模型 人工智能 自然语言处理 rag LLM OpenAI
一、准备工作1.注册OpenAIAPI首先,注册OpenAI并获取API密钥。2.环境配置安装必要的Python库:pipinstallopenaifaiss-cpusentence-transformersflask二、设计系统架构整个系统将包括以下几个部分:前端:用户输入问题和上传文件的界面。后端:处理用户请求,调用OpenAIAPI,返回答案。向量数据库:存储和检索文档向量。三、实现步骤步骤
SpringBoot+Vue疫苗接种管理系统 新冠疫苗接种系统 预约疫苗接种管理系统Java
计算机程序老哥
作者主页:计算机毕业设计老哥有问题可以主页问我一、开发介绍1.1开发环境开发语言:Java数据库:MySQL系统架构:B/S后端:SpringBoot(Spring+SpringMVC+Mybatis)前端:Vue工具:IDEA或者Eclipse,JDK1.8,Maven二、系统介绍2.1图片展示注册登录页面:登录.png前端页面功能:首页、接种点、疫苗信息、疫苗咨询、个人中心、后台管理首页.pn
6U VPX总线架构:搭载飞腾D2000/FT2000 + FPGA-K7(赛灵思)
未来通信-国产化板卡及设备定制
fpga开发 信息与通信 国产化 飞腾处理器
"CPU+FPGA"结构是指一种结合了中央处理器(CPU)和现场可编程门阵列(FPGA)的系统架构。这种架构利用了CPU的通用计算能力和FPGA的并行处理能力,可以提供高效能、低延迟和高灵活性的计算平台。K7是Xilinx7系列FPGA中的一个系列,这个系列的FPGA提供了高性能和低功耗的特点,非常适合于各种应用,包括通信、航空航天与国防、汽车、工业、科学计算等领域。Kintex-7FPGA的一些
带你详细了解Spring Cloud微架构服务的发展史
武昌库里写JAVA
面试题汇总与解析 算法 数据结构 c语言 开发语言 二维数组
前言SpringCloud是一个基于SpringBoot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务注册,服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。系统架构演变概述在公司业务初创时期,面对的主要问题是如何将一个想法变成实际的软件实现,在这个时候整个软件系统的架构并没有搞得那么复杂,为了快速迭代,整个
分布式系统架构-微服务架构
编程小飞侠
微服务 注册中心 java 架构 微服务
一.什么是分布式系统架构分布式系统架构是指将一个单一的应用程序或服务拆分成多个独立的部分,这些部分可以在不同的计算机、服务器或者地理位置上运行,并通过网络进行通信和协作。分布式系统的设计旨在提高系统的可靠性、可用性和扩展性,同时减少单点故障的影响。二.分布式系统优缺点优点:高可用性:分布式系统可以通过在多个节点上复制数据或服务来提高可用性。如果一个节点发生故障,系统仍然可以继续运行。容错性:分布式
地平线—征程2(Journey 2-J2)芯片详解(9)—电源管理
零零刷
智能驾驶AI芯片—提升篇 人工智能 自动驾驶 深度学习 神经网络 硬件工程 硬件架构 嵌入式硬件
写在前面本系列文章主要讲解地平线征程2(Journey2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey2-J2)芯片。若有相关问题,欢迎评论沟通,共同进步。(*^▽^*)错过其他章节的同学可以电梯直达目录↓↓↓地平线—征程2(Journey2-J2)芯片详解——目录-CSDN博客3.系统架构本章主要从时钟结构、复位结构、电源管理和电源模式以及中断映射四个方面描述系统架
应用编程基础课第一讲:编程基础知识
ligang1109
本人从事linux下web编程多年,最近有幸给组内同学做培训,希望能给大家介绍下自己这些年在应用编程方面的经验,今天先给大家介绍下一些编程方面的需要掌握的基础知识:操作系统介绍先来看一个unix系统的架构图:arch-of-unix.jpg从内向外,unix系统架构分为:内核:控制硬件资源,提供应用程序运行的环境系统调用:内核的编程接口shell和库函数:为应用程序提供编程、运行接口应用程序:我们
区分特性团队和组件团队的交付价值
雷大野
组件团队:在传统的开发模式下,人们习惯于按照系统的架构模块,或者系统分层组织团队,也有的团队按照系统需求、开发、测试结合系统架构混合组织的方式。这种团队组织的方式,我们称之为组件团队,是指每个团队只是完成系统功能的某一个部件,而不是一个端到端最终用户想要的部分特性。这样的团队的成员拥有相似的技能和知识,方便某一领域技能的互相交流和提升,且团队指责清晰。但是这样的团队并不能直接向客户交付价值,一个简
什么是耦合、紧耦合、松耦合
mingzhi61
java代码审计 java代码审计 开发语言
一、耦合耦合是两个或多个模块之间的相互关联。在软件工程中,两个模块之间的耦合度越高,维护成本越高。因此,在系统架构的设计过程中,应减少各个模块之间的耦合度,以提高应用的可维护性。二、紧耦合紧耦合架构本质是Client/Server的模型,如下图所示:优点是:架构简单、设计简单、开发周期短、能够快速的开发、投入、部署、应用。但随着集群规模的扩大,系统的稳定性逐渐变差,主要原因如下:1、同步操作导致对
设计模式反模式:UML图示常见误用案例分析
jun778895
设计模式 uml
设计模式反模式:UML图示常见误用案例分析在软件开发过程中,设计模式(DesignPatterns)作为解决常见设计问题的最佳实践,被广泛地应用于提升代码质量和系统可维护性。然而,当这些设计模式被误用或滥用时,它们可能会转变为反模式(Anti-Patterns),导致系统架构的复杂性增加,甚至引发一系列问题。特别是在使用UML(统一建模语言)图示时,这些误用表现得尤为明显。本文将通过几个具体的案例
系统架构师学习大纲(三)
星辰@Sea
系统架构 系统架构 学习
一.学习常见的系统架构模式1、分层架构分层架构是一种常见的软件设计方法,将系统分解为多个层次,每个层次负责不同的功能和责任。分层架构的目的是提高系统的可维护性、可扩展性和可重用性。常见的分层架构包括三层架构和四层架构。三层架构:表现层(PresentationLayer):负责用户界面的展示和用户交互。业务逻辑层(BusinessLogicLayer):负责处理业务逻辑和业务规则。数据访问层(Da
外贸管理系统采购销售报关计算机毕业设计VUE/PYTHON/MYSQL
计算机程序设计开发
java 课程设计 vue.js python 计算机毕业设计 数据库管理系统 java spring boot
开发一个基于Vue、Python和MySQL的外贸管理系统,用于处理采购、销售以及报关等业务流程。这样的系统通常涉及前端界面展示、后端逻辑处理以及数据库存储等多个部分。下面是一些关键组件的设计建议:1.技术栈选择前端:Vue.js后端:Python(Flask/Django)数据库:MySQL2.系统架构设计前端(Vue.js)页面设计:登录/注册页面主页(显示统计数据、最新订单等)采购管理页面销
反无人机技术综述:通信技术与人工智能的融合
人工智能学家
无人机 人工智能
来源:无人争锋近年来,智能无人系统的发展日新月异。在俄乌冲突这一现代战争中,双方都大规模使用了无人机执行多样化任务,包括侦查、打击和情报搜集等。无人机为战场带来了前所未有的洞察力,从而改变了传统的战略和战术。因此,反无人机技术的研究和发展变得尤为重要。图1展示了一套当前广泛采用的反无人机系统架构。反无人机技术的现状为了有效应对无人机技术的挑战,研究人员已经开发了多种反无人机技术。这些技术主要分为两
设计模式反模式:UML图示常见误用案例分析
天蓝蓝23528
设计模式 uml
设计模式反模式:UML图示常见误用案例分析在软件开发过程中,设计模式(DesignPatterns)作为解决常见设计问题的最佳实践,被广泛地应用于提高代码质量和可维护性。然而,当这些设计模式被误用或滥用时,它们可能会变成反模式(Anti-Patterns),导致系统架构的复杂性增加,甚至引发一系列问题。特别是在使用UML(统一建模语言)图示设计模式时,这些误用表现得尤为明显。本文将通过几个具体的案
MySQL系统架构
robot_test_boy
逻辑模块组成MySQL分为两层架构,第一层SQLLayer,完成在MySQL数据库系统处理底层数据之前的所有工作,包括权限判断、Query解析、执行计划优化、querycache的处理等;第二层存储引擎层StorageEngineLayer,完成底层数据存取操作,由多种存储引擎组成。架构示意图SQLLayer中包含了多个子模块1.初始化模块是在MySQLServer启动的时候,对整个系统做各种各样
分布式系统架构手册
ArchManual
分布式架构 java big data elasticsearch 分布式 微服务
ArchManual分布式系统架构手册项目介绍ArchManual不是:某个技术架构的深度剖析某个技术框架的源码分析某个技术工具的安装运维某个技术类库的代码示例而是:常用分布式技术的总体概览常用技术主题的归纳总结常用技术框架的归类罗列常用技术架构的简单分享希望成为:速查手册:平时工作中做技术架构、框架选型时的速查手册学习提纲:业余学习或者面试时的一个学习提纲技术地图:对技术框架有一个整体和全面的了
基于Python的图书管理系统的设计与实现 毕业设计开题报告_基于python的图书销量分析系统的设计与实现开题报告
2401_84139728
程序员 python 课程设计 开发语言
本文的主要研究内容包括以下几个方面:建立基于Python的图书管理系统,实现对图书资源的自动化管理。将图书的ISBN码与豆瓣API接口相结合,实现对图书数据的自动查询,并将数据存储到数据库中。建立前后端分离的系统架构,大大降低了系统复杂度,并且易于维护和升级。使用Python自带的tkinter模块,实现前端页面和后端逻辑的交互,提高系统的易用性和用户体验。本文的创新点主要有以下几个方面:采用Py
思想篇,趋合(6)
KivalYu
本篇讨论的是系统架构设计开发中的取舍问题,也就是如何选择要进行的方案措施。“趋”,是顺应、跟随趋势的意思。“合”,是符合、投合的意思。所谓“趋合”,就是根据系统业务架构发展的趋势,选择符合情况的方案措施进行系统维护改进的意思。在系统架构设计开发中,无论是业务的核心系统,还是围绕核心系统的周边系统或服务组件,都应该有其恰当合适的使用场景和系统关联。系统不断变化运行,逐渐会演变成不同的形势。因此,系统
Android系统架构
程序猿陌名!
Android基础重点 android 系统架构
文章目录Android系统架构Android四层架构01.Linux内核层02.系统运行库层03.应用框架层04.应用层Android应用开发特色01.四大组件02.丰富的系统控件03.SQLite数据库04.强大的多媒体05.地理位置定位Android系统架构为了让你能够更好地理解Android系统是怎么工作的,我们先来看一下它的系统架构。Android大致可以分为四层架构:Linux内核层、系
001软考系统架构师倒计时第6天
Jack魏
码云参考资料:https://gitee.com/lxmuyu/soft_examination整理到2018资料下载:迅雷网盘链接:https://pan.xunlei.com/s/VNFbm9Q7rnN5bEbBw-SiUnOBA1提取码:j7wj整理到2021:阿里云网盘链接:https://www.aliyundrive.com/s/ob1o2BeaVMb提取码:4v3y软考系统架构师倒计
项目中 枚举与注解的结合使用
飞翔的马甲
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