Flex+J2EE 之小记

简介:
由于本人也是初学者(刚看了两天视频),所以请高手指点,这里赞下 blog 名叫交口称赞的兄弟,他在flex 方面是行家,谢谢了。
摘要:最近晚上抽出点时间写了这篇文章,关于 Flex 开发方面的语言和架构,介绍了大家都熟悉的分层结构,着重介绍视图层(flex 实现),服务控制层和领域模型层,并按照严格分层,高解耦合性并结合 Flex 技术实验了一个用户管理小模块,案例不是目的,重要的是介绍开发思想。本文第一部分介绍 Flex 相关技术以及 ActionStript3.0 语言。第二部分介绍开发实例的开发过程,代码可以下载,亮点在接口工程。由于本人 flex 经验不足,在以后的工作中会不断补充。
关键字:Flex, J2EE, 架构
1. Flex 介绍 
        FLEX,是Rich Internet Applications时代的牛×产物Rich Internet Applications,翻译成中文为富因特网应用程序。传统网络程序的开发是基于页面的、服务器端数据传递的模式,把网络程序的表示层建立于HTML页面之上,而HTML是适合于文本的,传统的基于页面的系统已经渐渐不能满足网络浏览者的更高的、全方位的体验要求了,这就是被Macromedia公司称之为的“体验问题”,而富因特网应用程序的出现也就是为了解决这个问题。 
       Flex最重要的两个技术要数AS和MXML, MXML 和 HTML 一样是标记语言,它描述了反映内容与功能的用户界面。与 HTML 不同的是,MXML 可对表示层逻辑与用户界面和服务器端数据绑定提供声明抽象。MXML 可将表示与业务逻辑的问题彻底分开,以实现最大程度地提高开发人员的生产率及应用程序的重复使用率。MXML 的开发基础是在迭代过程上,这与其他类型的 Web 应用程序文件如 HTML、JSP、ASP是相同的。开发 MXML 应用程序就象打开一个文件编辑器一样简单,只要输入一些标签、保存文件,然后在 Web 浏览器上打开文件 URL 即可。 
        MXML 文件同时也是普通的 XML 文件,所以可以选择多种开发环境。可以在简单文件编辑器、专用 XML 编辑器或是支持文件编辑的集成开发环境 (IDE) 中进行开发。由于 MXML 符合 W3C XML 方案的定义,您也可以使用结构化编辑,如代码着色和代码提示。 MXML和HTML间最大区别:前者定义的应用是编译的SWF文件,执行于FlashPlayer客户端中。后者是基于页面技术的应用。因此前者能提供更丰富的、动态的UI。MXML不支持Flash的某些特性,例如:时间轴。但是可以利用Flash设计组件并应用在Flex中。MXML应用可以是一个MXML文件,也可以是多个MXML组成,MXML支持MXML文件形式的自定义组件、ActionScript文件形式的自定义组件以及在Flash中建立的自定义组件。 FLEX试图通过提供一个程序员们已经熟知的工作流和编程模型,让程序员比从前更快更简单地开发动画及RIA应用。在多层式开发模型中,FLEX应用属于表现层。FLEX的语言和文件结构也试图把应用程序的逻辑从设计中分离出来
         总之,flex 是未来界面开发的一个好方向,据我了解很多公司都要求员工要学习 flex 技术,可见 flex 受欢迎的程度。 
2 .ActionStript3.0 特性介绍
       ActionScript 是针对 Adobe Flash Player 运行时环境的编程语言,它在 Flash 内容和应用程序中实现了交互性、数据处理以及其它许多功能,ActionScript 是由 Flash Player 中的 ActionScript 虚拟机 (AVM) 来执行的。ActionScript代码通常被编译器编译成“字节码格式” ,有点类似 java 的处理和运行机制。变过 C#,Java和javascript程序的朋友,肯定能在 ActionScript 中找到这些语言的影子。
 2.1内置命名空间和自定义命名空间
       四个内置修饰符:  
1  public  :对所有代码可见 
2  private : 只对类内部可见 
3  internal :只对定义所在的同一包内可见 
4  protected  :对同一包以及不同包的子类可见

      自定义命名空间:
             使用关键字namespace定义命名空间,声明属性和方法时,应用命名空间。
             AS 代 码: 
1
2 Namespace testSpace = " org.blogjava.jm/testSpace  " ;   
3 testSpace myfunction2(): void {}  
4  
5 use mySpace2;  
6 myfunction2();  // 调用使用 use 关键字打开命名空间
2.2       Local 变量特点    
         与java不同的是,在as3中,变量没有块级作用域(即两人大括号中间),如果在一个块内声明了一个变量,比如一个for循环内声明了一个变量,它在该代码所在整个函数内都是可访问的   
1 function myFunction(): void {   
2     for(var i:int=0;i<5:i++){   
3       var last:int = i;    
4    }
    
5     trace(last); //last 在 for 中定义但可以在 for 块外面访问到,个人觉得这样设计欠妥,尽管很方便。   
6}
 
2.3       Dynamic 类 
       Object 类本身就是动态类,当然也可以用 dynamic 关键字来声明一个类,所谓动态就是在运行时可以对类追加属性和方法。  
1 dynamic  class  Protean {}  
2 var myProtean:Protean  =   new  Protean();  
3 myProtean.name  =   " jack.wang " ;  
4 myProtean.password  =   3 ;  
5 trace(myProtean. name , myProtean.password ); 
  2.4       定义函数的两种方式:函数语句和函数表达式       
 1 // 函数语句声明    
 2 Function fun1(): void {}  
 3        
 4 // 函数表达式声明  
 5 var fun2:Function  =  function(): void {}   
 6 // 函数表达式声明的函数是不能够被垃圾回收的,必须显示的调用 delete 命令。
 7 var t:Test  =   new  Test();  // t是动态类Test的一个实例 
 8 t.funt  =  function() {} ; // 把一个函数声明为t的一个属性 
 9 delete t.funt;  // 删除刚才新增的函数,我们刚才声明的函数也被回收了
10
2.5       在as3中也有arguments对象,功能基本上和javascript中的一样。        
          arguments 对象是一个数组,其中包括传递给函数的所有参数,arguments.length 属性报告传递给函数的参数数量,(避免将 "arguments" 字符串作为参数名,因为它将遮蔽 arguments 对象) 
 function traceArgArray(x: int ): void   
 
{
    
for (var i:uint = 0; i < arguments.length; i++{  
  trace(arguments[i]); 
 }
   
 }
   
 traceArgArray(
1 2 3 );   
 
//  输出:    
 
//  1    
//  2   
//  3 
当然也可以用类似 java 的形式  function traceArgArray(x:  int ,  args) 
2.6       在as3中允许定义同名的静态属性和实例属性  

1
class  StaticTest  {  
2 static var message:String = "static variable";
3 var message:String = "instance variable";     }
 
4  var myST:StaticTest  =   new  StaticTest(); 
5trace(StaticTest.message); 
//  输出:静态变量    trace(myST.message);  //  输出:实例变量 
 2.7       在as中有一个叫做set和get存取器的东西,类似JavaBean,但又有所不同。
class  GetSet 
private var privateProperty:String;   
public function get publicAccess():String
return privateProperty;    
}

public function set publicAccess(setValue:String):void  {        privateProperty = setValue;    
}
  
}
  
 3 个人实验介绍
       案例是超级简单的,开发Web 应用的,不管你是基于 J2EE,.net 平台还是其他的 PHP 等等都很熟悉分层架构,其中五层是最熟悉不过的了,一般分为表示层,控制层,服务层,模型层和数据层,有的公司干脆就把服务层和模型层合并起来和控制层合并在一起,基于分层的开发可以横向也可以纵向,由于引入 flex 技术,因为并不是所有人都懂得 flex 开发方式,尽管他和传统的 Swing, SWT,GWT开发很相近 ,不过这样需求分析时可以构建可演进的原型系统,界面也很 RIA。
       人们常提面向接口编程于是经常看到 IUser user=new User();这样的代码,似乎就是在用接口,但是 new 的动作还是有依赖,于是人们用一些设计模式比如 Factory, Proxy,反射等等模式,后来又有了更好的依赖注入,似乎很完美了,可人们又陷进了过度设计,其实接口应用比直接用原类要多耗费几个机械指令 User user=new User(),而且在一个内聚的组件中尽量用对象直接连接,该分开的时候我们去用接口分,接口的目的是为了抽象,抽象的目的是为了解耦。
       本开发为了把模型层和服务层完全分开,引入接口工程,也就是单独开发一个工程来设计接口,这个工程有设计师开发。 用户接口和工厂接口这两个类在单独的工程里开发,以便于模型和服务层同步开发。 在服务层不能对外暴露 IUser 接口,而他也要接受数据,这里用的是 UserVO 对象来封装数据,服务层不操作模型层的任何实现类,这样这两层之间完全解耦,当接口工程和实现完成时候打成 jar 包到 web 工程下 Flex 开发和 HTML开发有很大的不同,客户端和服务端交互的不是 HTML 而是 XML,所以在服务器端    的 Servlet 就应该输出 XML 流到客户端。 最后 Flex 也是一个单独的工程,通过 HTTPService 和 Web 服务器端交互数据。

下载:我的实验代码

本文转自BlogJava 新浪blog的博客,原文链接:Flex+J2EE 之小记 ,如需转载请自行联系原博主。

相关文章
|
机器学习/深度学习 人工智能 算法
小白教程-阿里云快速搭建Stable-Diffusion WebUI环境+免费试用
Stable-Diffusion 是目前热门的AIGC图像生成方案,通过开源与社区共享模型的方式,成为AI艺术与创意产业的重要工具。本文介绍通过阿里云快速搭建SD WebUI的服务,并有免费试用权益,适合新手入门。通过详细步骤指导,帮助读者轻松上手,享受创作乐趣。
2396 0
|
设计模式
在实际开发中,什么时候应该使用 `new` 关键字,什么时候应该使用 `Object.create()` 方法?
【10月更文挑战第29天】`new` 关键字适用于创建具有特定类型和初始化逻辑的对象实例,以及实现基于原型链的继承;而 `Object.create()` 方法则适用于基于现有对象创建相似对象、避免构造函数的副作用、创建具有特定原型链的对象等场景。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象,以实现更高效、更灵活的代码结构。
|
Shell Linux
Shell基础 01
Shell 是一种脚本语言,用于操作 Linux 服务器。本文介绍了 Shell 变量的定义和作用域,以及多命令运行的练习。变量定义时需注意字符串的引用方式,变量可分为局部和全局。多命令运行中,通过逻辑运算符 `&&` 和 `||` 实现条件判断和命令执行。
169 5
|
SQL DataWorks NoSQL
DataWorks操作报错合集之在执行带with语句的SQL查询时出现了错误,是什么原因
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
设计模式 Java
详细讲解什么是工厂模式
详细讲解什么是工厂模式
|
存储 安全 Java
C++第十一节——单例模式 C++11 智能指针 异常 有关讲述
可以用同样的方式来实现,就是将构造函数私有化,然后让创建类的时候只能通过一个接口函数来实现,而在这个接口函数中我们将其创建在栈上。
727 3
C++第十一节——单例模式 C++11 智能指针 异常 有关讲述
|
安全 Linux Shell
Read-only file system 问题分析与解决| 学习笔记
快速学习 Read-only file system 问题分析与解决。
 Read-only file system 问题分析与解决| 学习笔记
|
XML 存储 设计模式
八分钟学会YAML数据驱动
什么是YAML?YAML语法?如何在自动化测试中应用?看完这篇就会了!
447 0
八分钟学会YAML数据驱动
|
Go
go语言的切片研究
go语言的切片研究
260 0
go语言的切片研究
|
Python
Python训练营笔记 从函数到高级魔法方法 Day9
学习笔记 - 天池龙珠计划 - Python 训练营 Task3 Day9(魔法方法)
136 0