flex中Carigorm框架
- 格式:doc
- 大小:79.50 KB
- 文档页数:7
简述orm框架的基本结构ORM(Object-Relational Mapping)框架是一种将对象模型与关系型数据库之间进行映射的工具,简化了在应用程序中操作数据库的过程。
ORM框架的基本结构通常包括以下几个核心组件:一、实体类(Entity Class):实体类是ORM框架中的核心,它对应着数据库中的表结构。
每个实体类通常都映射到数据库中的一张表,类的属性对应表的列,对象的实例对应表中的一行数据。
二、映射文件(Mapping File):映射文件是用于描述实体类与数据库表之间映射关系的配置文件。
这些文件通常采用XML或注解的方式,定义了实体类属性与数据库表列的对应关系、主键、外键等信息。
三、会话工厂(Session Factory):会话工厂是ORM框架的一个重要组件,负责创建和管理会话对象。
会话工厂的初始化通常发生在应用程序启动时,它负责加载映射文件、建立数据库连接等操作。
四、会话(Session):会话是与数据库交互的一个单线程工作单元。
通过会话,应用程序可以进行数据库的增、删、改、查等操作。
会话负责管理实体对象的生命周期,包括对象的加载、保存、更新和删除等操作。
五、查询语言(Query Language):ORM框架通常提供一种查询语言,用于执行数据库查询操作而不是直接使用SQL语句。
这种查询语言可以是面向对象的,更贴近实体类的属性和关系,使查询更加直观。
六、事务管理(Transaction Management):ORM框架通常提供事务管理机制,确保对数据库的一系列操作要么全部成功提交,要么全部回滚。
事务管理是保证数据一致性和完整性的重要组成部分。
七、连接池(Connection Pool):为了提高数据库访问的性能,ORM 框架通常使用连接池管理数据库连接。
连接池负责维护一定数量的数据库连接,使其可以被重复使用,减少连接的创建和关闭开销。
八、缓存(Cache):缓存是为了提高性能而引入的机制,用于缓存已经查询过的实体对象或查询结果。
Python中的ORM框架应用随着互联网和大数据时代的到来,数据存储和处理方案变得越来越多样化和复杂化。
在这个背景下,ORM (Object-Relational Mapping)框架应运而生。
ORM框架可以让我们在编写应用程序时,将业务逻辑与数据存储层进行分离,从而提高开发的效率和可维护性。
Python作为一种广泛使用的编程语言,在ORM方面也拥有一些优秀的框架,本文将对Python中的ORM框架进行简要介绍。
一、ORM框架概述ORM框架是指一组用于在程序中处理数据库的代码库或工具集,主要用于将关系型数据库中的数据转化为面向对象的语言中可以操作的对象,从而使得程序员更加专注于业务逻辑。
ORM的思想是将数据存储与应用程序进行解耦,以实现更加灵活、易于维护的代码。
通常情况下,ORM框架大致分为3个类别:(1)全自动ORM框架。
这种框架消除了程序员和数据库之间的大多数交互,可以明显简化编码流程。
程序员不再需要关心数据库表的结构,也无需手动编写SQL语句,而是可以直接操作数据模型。
例如,Django框架中所提供的ORM就是一种全自动ORM框架。
(2)基于Mapper的ORM框架。
这种类型的框架将面向对象的模型与数据库表的结构之间映射起来,通常以一张表对应一个类的形式来实现。
它需要程序员手动编写一些基于代码的映射规则,但一旦编写完成,就可以轻松地操作数据模型和数据库之间的数据交互。
例如,SQLAlchemy框架就是一种比较成熟的基于Mapper的ORM框架。
(3)类似JPA的框架。
由于Python并不是一种基于JVM的编程语言(像Java一样),因此Python中不存在可用于实现完全类似于JPA 的ORM框架的语言扩展(例如,Hibernate和EclipseLink)。
但是,有些框架确实试图提供与JPA相似的编程接口。
二、Python中的ORM框架1. Django ORMDjango ORM是Django框架的一部分,因此对于那些使用Django 开发Web应用程序的程序员来说,Django ORM是一种简单,易于维护和使用的ORM框架。
常用Flex IOC框架比较分析IOC(Inversion of Control),也称DI(Dependency Injection),是近年来在软件开发中变得非常流行的一种设计策略。
众多的Flex开发者,探索出了诸如Spring ActionScript、Parsley、Flicc和Swiz这样的IOC框架。
什么是IOC?一言以蔽之,IOC是一种软件设计模式。
借助IOC,可用一个独立的对象为其他对象的数据成员填充正确的实现,而不是由这些对象自己负责此项工作。
这样做的好处有两个。
第一,可将对象的数据成员声明为接口,从而将对象与其具体实现分离(即契约式设计,design by contract)。
第二,可从对象中删除创建逻辑,可以使对象的用途更为明确。
IOC容器提供一个框架,你可借此以一致和宣告的形式使用这个模式。
将此模式和接口结合起来,可以创建出易于测试、使用灵活的对象。
有关IOC模式更深入的讨论,请参看Martin Fowler的文章《Inversion of Control Containers and the Dependency Injection pattern》。
Java和.NET的IOC框架早已建立,在Flex社区,近来也有不小的进展。
本文将讨论Flex中的一些IOC框架的工作原理、使用方法,并对这些框架进行比较。
为了比较方便,我将在同一个工程(ProfileViewer)中使用Spring ActionScript、 Parsley、Flicc和Swiz这几个框架。
IOC的概念一般有两种最常见的对象配置方法:∙对象实例化(例如:var myObject = new Object())∙对象查找(例如:var myObject = registry.getMyObject())而利用IOC,你可在一个独立层中实例化应用程序要用到的对象,并传入它们所需的依赖。
具体来说,最常见的实现方法也有两种:∙Setter注入(例如:instance.myObject = new Object())∙Constructor注入(例如:instance = new Instance( new Object() ))一个IOC框架,通常由如下三个部分组成:配置、工厂和注入机制。
django orm框架的运行流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!深入理解Django ORM框架的运行流程Django ORM(Object-Relational Mapping)是Django框架的核心组件之一,它提供了一种优雅的方式来操作数据库,使得开发者可以使用Python对象来代表数据库表,而无需直接编写SQL语句。
择一个Flex框架•博客分类:•FLEX框架满天飞的今天,选择框架似乎是每一个开发人员必须的经历,不得不找到目前有哪些我们需要的框架,并进行横、纵向比较,做出取舍!对于MVC类型的框架,我们在采用传统web项目开发技术时,大多倾向于Struts2(webwork)和Spring MVC,而对于Flex的MVC框架,可以说是众说纷纭,选择不一。
与此同时,真正理解MVC框架的朋友,可能更愿意为Flex构造自己的MVC模式来保证项目的MVC清晰结构,原因在于现行框架的局限性以及Flex前后端通信的便利性吧!为了快捷而有全面了解一下现有的Flex MVC框架,转载了博文选择一个Flex框架!为便于阅读,其内容转载如下(并做了补充):==============================================================本文提供了当前最流行的Flex框架,你可以根据了解来选择最适合你的团队或者项目的需求的框架。
本文覆盖了Cairngorm、Mate、PureMVC以及Swiz 框架。
我特意选择了这些框架是因为它们已经被Flex show 播客提及并且或者已经被类似360|Flex 的会议所提出。
Cairngorm框架Cairngorm是最早最为成熟的Flex 框架。
它实际上是一个微架构——它提供了一系列已经被证明可以很好的互相协作的设计模式的集合。
Cairngorm采用累来自Java开发世界的笨重并且把焦点集中到了三个关键区域:处理用户行为,包装服务端交互与业务逻辑,并且管理客户端状态以及在用户界面(UI)上体现客户端状态。
在Cairngorm构建一个项目包含了拆散你的应用到若干个包中并且扩展Cairngorm的类。
如下是一个Cairngorm 项目主要包含的部分和类。
•ModelLocator ——作为数据存贮角色的单件——反映程序的状态。
单件类的性质保证了程序中所有的组件都访问相同的数据。
有没有听说过这个奇怪的词汇:“Cairngorm”?如果你的回答是“No”&&你是Flex程序员,哪你就看看自己是不是住在一个井底。
Cairngorm是Flex的一个MVC框架结构,名字取自苏格兰的一个山脉。
(kao,如果是我建立一个自己的框架结构,我就取名叫:“xxx”。
)有关这个框架,在网络上有很多图表用来讨论。
下面是我所理解的框架图表:使用Cairngorm的第一步是建立框架结构的骨架,包括了三个对象:Model Locater;Service Locator;Front Controller;Model Locator:承载了组件之间的所有的传递的信息和数据,这是一个Bindable(可绑定的)对象。
Service Locator:定义了与数据源(Httpservice,Webservice,Remoteobject)之间通讯的界面。
Front Controller:建立播送事件(Dispatch event)和命令层(command)之间的对应关系(mapping)。
看一下相关的代码:BuddyAppModelLocator.as:Xml代码1<em>package com.ny.flex.cairngorm.model2{3import er;45import mx.collections.ArrayCollection;67[Bindable]8public class BuddyAppModelLocator9{10public var buddyList:ArrayCollection=new ArrayCollection();11public var loginUser:User=new User();12public var viewStackSelectedIndex :int = 0;1314static private var __instance:BuddyAppModelLocator=null;1516static public function getInstance():BuddyAppModelLocator17{18if(__instance == null)19{20__instance=new BuddyAppModelLocator();21}22return __instance;23}24}25}26</em>在Model Locator代码中,定义了三个public的变量,buddyList:用来存放由数据库获取的密友列表;loginUser:定义一个User类型对象;viewStackSelectedIndex:定义viewStack指向的视窗。
GDS与java通信整合作者:赵国斌2009-10.10一、GDS第一步HelloWorld 实例1、新建java web 项目2、新建helloworldService POJO 并实现sayHello方法。
HelloService类:package org.test;public class HelloService {public String sayHello(String str){return"Hello " + str;}}3、将GDS包granite.jar 拷贝到webRoot\lib下4、配置web.xml<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="/xml/ns/j2ee"xmlns:xsi=/2001/XMLSchema-instancexsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"><!-- general information about this web application --><description>Hello World Sample Application</description><display-name>Hello World App</display-name><!-- handle AMF requests ([de]serialization) --><filter><filter-name>AMFMessageFilter</filter-name><filter-class>org.granite.messaging.webapp.AMFMessageFilter</filt er-class></filter><filter-mapping><filter-name>AMFMessageFilter</filter-name><url-pattern>/graniteamf/*</url-pattern></filter-mapping><!-- read services-config.xml file at web application startup --><listener><listener-class>org.granite.config.GraniteConfigListener</listene r-class></listener><!-- handle AMF requests (execution) --><servlet><servlet-name>AMFMessageServlet</servlet-name><servlet-class>org.granite.messaging.webapp.AMFMessageServlet</se rvlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>AMFMessageServlet</servlet-name><url-pattern>/graniteamf/*</url-pattern></servlet-mapping><!-- default content for helloworld application --><welcome-file-list><welcome-file>HelloGDS.swf</welcome-file></welcome-file-list><login-config><auth-method>BASIC</auth-method></login-config></web-app>5、在WEB-INF创建flex目录,在新建的flex目录中创建services-config.xml文件在WEB-INF创建granite目录,在新建的granite目录中创建granite-config.xml文件这两个文件在GDS服务启动时会读取分析,Flex编译时也要通过命令行编译。
XDesigner ORM 框架设计袁永福2011-01-20前言目前业界已经流行着很多ORM框架,但笔者还是要开发自己的ORM框架,在此不展开关于是否需要重复发明轮子的讨论,反正是要开发这个ORM框架,名为XDesignerORM,简称XORM。
笔者的数据库开发经验不大多,但有着很多的图形软件开发经验,相信笔者的一些开发理念能融入到这个ORM框架中,形成一个独具特色的具有实际应用价值的框架程序。
鉴于工作量大,而且避免闭门造车,笔者选择了开源模式。
设计理念首先讲讲笔者的设计理念,ORM框架就是为了实现应用程序中的一个个实体对象和数据库记录之间的来回映射关系。
其实实体对象和数据库记录是业务实体模型的两种表现形式,两者应该是平等的,但笔者先尝试下从应用程序的实体对象为中心的设计策略。
这样笔者可以借鉴对象序列化的思想,可以将数据保存到数据库中视为对象的针对数据库的序列化过程。
.NET框架已经提供了三种序列化过程:1.二进制序列化;2.XML序列化;3.CodeDom 序列化。
最常用的就是XML序列化,而且WebService就是以XML序列化为底层基础的。
在XML序列化中,对象中的属性是和XML文档中的节点一一对应,.NET框架并提供一种通用的XML序列化操作类型System.Xml.XmlSerializer来完整的完成XML序列化和反序列化过程。
绝大多数情况下,开发者无需考虑也无需编写代码来实现对象和XML文档之间的映射过程,而在一些必要的情况下为对象类型及其成员添加System.Xml.XmlElementAttribute等说明性质的特性。
既然XDesignerORM本质上是基于数据库的对象序列化过程。
于是可以参考Xml序列化的原理,应当包含以下几个部分。
1.数据库处理层。
能尽量屏蔽各种特定的数据库的特性。
比如MS SQL Server, Oracle , DB2使用的SQL语法的些许不同。
初期为了简单,只支持MS SQL Server,不支持事务。
flex 各组件对应的样式属性中DataGrid组件样式属性backgroundColor 背景色backgroundAlpha 背景色透明度数值从0.00~1.00alternatingItemColors 间隔背景颜色间隔项的颜色这个属性要设置2个色彩,某一项的背景色和下一项的背景色headerColors 标题头背景渐变颜色这个属性要设置2个色彩,标题头背景渐变起始色和标题头背景渐变结束色horizontalGridLines 是否显示横向分隔线是否显示每一行之间的横向分隔线 true falsehorizontalGridLineColor 横向分隔线颜色 horizontalGridLines 为true时有效verticalGridLines 是否显示垂直方向分隔线是否显示每一行之间的横向分隔线 true false 此属性只对内容中的分隔线有效,标题头的分隔线是默认的verticalGridLineColor 垂直方向分隔色 verticalGridLineColor 为true时有效useRollOver 是否实现鼠标经过时的变化效果 true falserollOverColor 鼠标经过一行时的本行背景色 useRollOver为true时有效textRollOverColor 鼠标经过一行时的本行文字颜色 useRollOver 为true时有效(这个属性好像无效?)color 文字颜色textSelectedColor 被选中行的文字颜色(这个属性好像无效?)selectionColor 被选中行的背景颜色textIndent 每一行文字缩进距离数值从0~30Tree组件样式属性backgroundColor 背景色backgroundAlpha 背景色透明度数值从0.00~1.00alternatingItemColors 间隔行的颜色这个属性设置2个色彩,某一行的背景色和下一行的背景色depthColors 树级结构中每级的背景色这个属性可设置多个色彩,中间以逗号分隔。
1、Carigorm框架的流程:客户端页面有view组成,view使用flex的[bind]标签来显示ModelLocator。
View根据诸如鼠标点击,按下按钮以及拖拽之类的用户动作,产生Event 事件。
这些事件被FrontCotroller广播并监听。
FrontController会将Event事件映射到对应的Command。
Command包括业务逻辑,创建所需的Delegate,处理Delegate的响应,以及更新存储在ModelLocator中的数据。
由于View是绑定到ModelLocator中的数据上的,所以当ModelLocator中的数据改变的时候View也会自动更新。
Delegate调用Service并且将结果提交给Command,这一步是可选的,但是推荐这么做。
Service调用远程数据然后将结果提交给Delegate。
Delegate的最简单的形式就是一个中间人的角色。
如果一个Command需要调用webservice 来获得一些数据,它将创建一个Delegate来完成这个调用。
一个Command创建一个Delegate,Delegate调用一个指定的dataService,Service返回结果给Delegate,Delegate返回结果给Command。
Delegate并不是100%必需的,但是当涉及测试&程序环境的时候它们很有帮助。
相对于在Command代码中使用查找替换改变所有的引用来测试,将一个Delegate重映射到一个测试Service更为简单。
2、Carigorm框架的各个部分组成:
1.ModelLocator:在一个地方存储程序中所有的值对象(ValueObjects,数据)并共享
变量。
它与HTTP Session对象相类似,不过它存储在Flex客户端,而不是存储在一个中间层程序服务器的服务器端。
2.View(视图):一个或多个Flex组件(Button,panel,combo Box,Tile等等)绑定
到一起形成的一个特定的个体,使用ModelLocator中的数据并且针对用户的交互动作(如点击,鼠标滑过,拖拽等)产生自定义的CairngormEvents。
3.FrontController(前端控制器):接受CairngormEvents并且将它们映射到
CairngormCommands。
mand(命令):处理业务逻辑,调用CairngormDelegates或其他的Commands,
以及更新ModelLocator中存储的值对象和变量。
5.Delegate(委托):由一个Command创建,它将远程过程实例化并且将结果返回给
Command。
6.Service(服务):定义链接到远程数据库的远程过程调用(HTTP,Web Services等)。
3、下面就一个实例来说明:
1、刚进入这个页面需要加载数据:那么在页面panel(自定义组件)标签中添加一个属性,
并在AS代码中添加这个方法:
2、由于,不需要传递什么参数,所以在event包中:定义一个LoadPersonsEvent事件并继
3、再返回自定义组件上,在Panel中,在as代码的LoadPersons方法中建立一个
LoadPersonsEvent事件,并分发,后会在Control包中进行监听。
(所以Carirngorm框架
4、由于页面的列表组件要和数据进行绑定,因此在model包中,定义一个集合,并绑定,
必须得绑定。
5、此时要在Control包中注册并监听一个事件LoadpersonsEvent(根据此事件的ID),并把事
件与Command命令进行映射。
6、在定义一个与事件ID对应的Command之前,我们要在business包下定义一个Service (用来请求后台数据)和在business之下建立一个delegates包,再在dalagates包中定义一个PersonDelegate,作用是发送请求并响应。
7、接着为了让LoadPersonEvent事件与具体的Command对应,需在command包中,定一
个LoadPersonsCommand,并继承Icommand接口。
在这里也一并把model中的数据进。