[应用架构] 应用架构之(VC+Python+Flex)

  在应用开发过程中,特别是企业级别的开发应用,我们习惯使用JAVA用业务逻辑,原因有:1,它是开源的,2。有完整的社区支持。3.跨平台,具有很好的移植性。4.网络功能强大。


       但有时JAVA的操作会受限,比如实时性方面,还有操作底层Windows接口方面,代码的封装性方面都比较逊色于VC之DLL。而且在做JAVA开发时,由于它比较笨重,默认的企业级应用都打开着。应用软件开发师不得不发费比较长的学习曲线学习,从J2SE到J2EE,再到JAVA EE,以及数不情的应用架构。应用开发者疲于学习。但相对而言,PYTHON,学习曲线比较低,使用简单,而且功能强大,基本上JAVA能够了的事情,它都可以胜任,在应用方面,比较适合新手学习和使用。在我看来,阅读Python代码,就像阅读一篇E文一样,是那样的有趣。而在视图层来讲,目前比较流行的有JAVAFX,SIVERLIGHT,FLEX,由于HTML5还没有统一的标准,在RIA应用方面,首选的就是FLEX了。所以在这里我打通了VC,PYTHON,FLEX之间的通信,通过一个应用的例子,来讲解它们是如何实现的。


      1.VC之DLL编程


       简介:


自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上Windows操作系统中几乎所有的内容都由DLL以一种或另外一种形式代表着,例如显示的字体和图标存储在GDI DLL中、显示Windows桌面和处理用户的输入所需要的代码被存储在一个User DLL中、Windows编程所需要的大量的API函数也被包含在Kernel DLL中。 

  在Windows操作系统中使用DLL有很多优点,最主要的一点是多个应用程序、甚至是不同语言编写的应用程序可以共享一个DLL文件,真正实现了资源"共享",大大缩小了应用程序的执行代码,更加有效的利用了内存;使用DLL的另一个优点是DLL文件作为一个单独的程序模块,封装性、独立性好,在软件需要升级的时候,开发人员只需要修改相应的DLL文件就可以了,而且,当DLL中的函数改变后,只要不是参数的改变,程序代码并不需要重新编译。这在编程时十分有用,大大提高了软件开发和维护的效率。




     打开vc++6.0建立一个工作区间,然后file->new->projects->Win32 Dynamic-Link Library->空dll


     新建funDll.cpp.


例子:


    // funDll.cpp : Defines the entry point for the DLL application.


//




#include "stdafx.h"


#include <iostream>


using namespace std;




#ifdef _MANAGED


#pragma managed(push, off)


#endif




#ifdef __cplusplus


#define EXPORT extern "C"__declspec(dllexport)


#else


#define EXPORT __declspec(dllexport)


#endif


EXPORT int HelloWorld()


{


cout <<"hello world" <<endl;


return 0;


}




/*


EXPORT int Max(int a, int b)


{


        if(a>=b)


                return a;


        else


        return b;


}


*/


EXPORT int Min(int a, int b)


{


        if(a>=b)


                return b;


        else


         return a;


}










BOOL APIENTRY DllMain( HMODULE hModule,


                       DWORD  ul_reason_for_call,


                       LPVOID lpReserved


      )


{


    return TRUE;


}




#ifdef _MANAGED


#pragma managed(pop)


#endif




2.接着我使用python来访问这个封装好了的DLL动态链接库,一般而言,里面的内容,只有提拱接口才可以访问,它的安全性比较高。


Python的相关代码如下:


#coding=utf-8
'''
Created on 2011-11-29


@author: LONMID
'''
import web
from ctypes import *
urls = (
    '/(.*)', 'hello'
)
app = web.application(urls, globals())




fileName = "funDll.dll"
func = cdll.LoadLibrary(fileName)


class hello:        
    def GET(self, name):
        if not name: 
            name =func.Max(1,67) + func.HelloWorld() 
        return 'Hello, ' + name + '!'


if __name__ == "__main__":
    app.run()


注意:在这里我使用webpy框架,在地址栏输入http:localhost:8080/hello  即可打印出Dll里面的内容细节。

3.最后使用flex,来呈现python处理的结果,python就是一个中转站,具有业务逻辑。然后提拱给flex使用。
flex的相关代码是:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                           xmlns:s="library://ns.adobe.com/flex/spark" 
                           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
        
        <fx:Script>
                <![CDATA[
                        
                        import mx.events.FlexEvent;
                        import mx.rpc.events.ResultEvent;
                        import mx.rpc.http.mxml.HTTPService;
                        import mx.controls.Alert;
                        
                        //使用动态的HTTPSERVIER
                        public var pythonHttpService:HTTPService = new HTTPService();


                        protected function button1_clickHandler(event:MouseEvent):void
                        {
                                var txtValue:String = txtInput.text;
                                if(txtValue.length !=0 ){
                                        pythonHttpService.url = "http://localhost:8080/"+txtValue;
                                        pythonHttpService.method = "post";
                                        pythonHttpService.addEventListener(ResultEvent.RESULT, pythonHttpHandler);
                                        pythonHttpService.send();
                                        //发送出去
                                }
                                        
                        }
                        
                        public function pythonHttpHandler(event:ResultEvent):void{
                                var stringValue:String = new String(event.result);
                                Alert.show(stringValue);
                        }
                        
                ]]>
        </fx:Script>
        
        <fxeclarations>
                <!-- 将非可视元素(例如服务、值对象)放在此处 -->
        </fxeclarations>
        <s:Button x="61" y="164" label="点击我"  click="button1_clickHandler(event)"/>
        <sabel x="61" y="125" width="50" height="23" text="请输入:"/>
        <s:TextInput x="118" y="125" id="txtInput" />
</s:Application>


    上面是一个简单的应用例子,通过上面的例子,我们可以了解它们之间的通信过程,相比较JAVA而言,它适合于业务逻辑不复杂的企业级应用中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值