//转的,怕想百度博客一样搬家,赶紧先复制下来。

框架其实就是一种开发模式,用tangram框架开发应用程序意味着选择一种面向接口、模块化的开发方式。这和传统的Delphi应用程序开发方式有一定区别,对于刚刚接触框架的童鞋可能不知道如何下手,因此有必要把框架的一般开发方式说明一下。不过框架比较灵活,因此这里仅仅说我的使用经验,如果有更好的方式或建议欢迎大家一起探讨。

1. 应用程序的目录结构 
典型的目录结构为,主程序(Host)放一个目录,其他各个模块都放在独立的目录下,此外,还有一个Bin目录,是主程序和各个模块的编译输出目录;还有一个Interfaces目录,用于保存整个项目的接口单元,Interfaces目录的路径必须加到主程序和各个模块的搜索目录中,可以点”Project”->”Options”-“Directories/Conditionals”在”Search Path”里加,为什么要这么麻烦的设置各个模块的私有搜索路径而不直接加到Delphi的搜索路径是因为加到Delphi的话,如果你还有其他使用框架的项目的话就很容易混淆;还有另一个和Interfaces目录一样重要的目录就是DCP目录,DCP也样加到各个模块和主程序的私有搜索路径中,DCP用于作为BPL包的DCP输出路径,每个包编译时都会生成一个DCP文件,包有依赖关系会用到它,因为每个程序一般都需要有一个放祖先类等东西的包,这个详细请看第2点“程序的一般结构”。此外可能还有象Doc(用于放项目文档),Images(用于放图片图标)等目录,但不是框架必须的。

2. 程序的一般结构 
一个项目至少有一个主程序(Host),还有若干个模块(BPL或DLL)。传统的开发方式,我们一般都先在主程序创建菜单和工具栏,然后在菜单和工具栏按扭下写代码创建相应的窗体,但我建议放弃这种开发方式,在使用框架开发中,主程序的菜单以和工具栏应该是在模块中创建的,加载相应的模块才会有相应的菜单和工具栏,这样程序扩展性非常灵活(既插件化)。因此,主程序必须实现一个接口,一般叫IMainForm(叫别的也行),用于包装一些创建菜单、工具栏以前创建窗体等功能,模块可以通过这个接口创建自己的菜单和工具栏等。这里会遇到一个问题就是,菜单或工具栏因为创建的时候不同顺序不太好控制,这个有很多种解决方法,比如可以象AdvancedDemo展示的那样可以自己定义菜单的顺序,但那样相对麻烦,我更倾向于在设计期把菜单的结构设计好,菜单的项才由模块创建。当然还有别的控制方法,可以自行发挥。 
另外,一个项目最好还有一个公共包,公共包里可以放一些基类,我建议一个项目所有的窗体最好都继承自一个共同的基类,这样你可以设置一些共同的风格,比如字体等等,还有其他很有用的东西,当然基类下面可能还有各个分支,比如单据基类,字典基类等都放公共包中。此外,公共包还可以放个DataModule,可以放一些共公的东西,比如imageList,里面放些图标整个项目都可以共用,还有全局变量也可以定义成DataModule的成员,比如登录的用户信息等。甚至放共公的数据库链接(DBConnection),总之这个是很有用的。不过别忘了创建DataModule的实例,可以在单元的initialization里创建,finalization里释放。使用这个公共包需要让主程序或者模块都依赖它,引用相应的单元就行了。公共包不必用框架的IDE向导来创建,普通的BPL就行,也不必configtool.exe安装,把它的DCP输入目录设成第1点提示到DCP目录就行。 
最后还有一个模块加载问题。如果不是特别需要,我建议让框架自动加载模块,让框架自动加载模块很简单,把框架自带的configtool.exe拷贝到bin目录下,运行它,点击”工具”->”模块管理”,在里面安装你的模块(DLL或BPL),然后运行主程序就行了。

3. 模块用BPL还是DLL好? 
BPL和DLL各自有各自的优点和缺点,框架2.5版本以前只支持BPL模块,2.5后支持BPL和DLL两种模块方式。不过我建议,一般的模块最好都使用DLL方式,而象第2点所提到的公共包才使用BPL。用BPL模块发布时,需要带上用到的第三方控件的包,而用DLL模块则可以自己选择带或者不带,默认是不带,不过不带的话编译出来会比BPL大一些。对于一些大的控件,比如Dev Express,可以把Dev的所有包合并成一个然后带上(如何合并可以看这篇文章:http://hi.baidu.com/tintinsoft/blog/item/40934a0edac6373f6159f351.html)。

4. 打包发布程序 
因为框架需要带包编译,因此发布时要带上一些包。一般情况下有Delphi的一些包,比如vclxxx,rtlxxx,还有框架的核心包tangram_core.bpl,还有自己创建的一些包,比如公共包,以前第三方控件的包。如果模块是BPL,那可以用框架自带的PackageRequires找到要带上的包,如果是DLL只能自己看它依赖的包或者借助第三方的工具了。

[转]Tangram框架应用开发的一般模式的更多相关文章

  1. 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组

    真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...

  2. Navi.Soft30.框架.WinForm.开发手册

    阅读导航 Navi.Soft30.Core类库.开发手册 http://www.cnblogs.com/xiyang1011/p/5709489.html Navi.Soft30.框架.WinForm ...

  3. 浅析Thinkphp框架中运用phprpc扩展模式

    浅析Thinkphp框架中应用phprpc扩展模式 这次的项目舍弃了原来使用Axis2做web服务端的 方案,改用phprpc实现,其一是服务端的thinkphp已集成有该模式接口,其二是phprpc ...

  4. 使用 CodeIgniter 框架快速开发 PHP 应用(四)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(四) 使用 CI 简化数据库开发你学习CI 是因为你想要使编程更容易和更有生产力.这一章讲述CI的Active Record类. 如果C ...

  5. 使用 CodeIgniter 框架快速开发 PHP 应用(一)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(一) 对 CodeIgniter 的介绍大多数PHPer都想写出运行状态良好的应用程序,而且希望尽可能做得简单且不费事.这篇文章是有关 ...

  6. 使用Maven搭建Struts2框架的开发环境

    一.创建基于Maven的Web项目

  7. Java EE互联网轻量级框架整合开发— SSM框架(中文版带书签)、原书代码

    Java EE互联网轻量级框架整合开发 第1部分 入门和技术基础 第1章 认识SSM框架和Redis 2 1.1 Spring框架 2 1.2 MyBatis简介 6 1.3 Spring MVC简介 ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  9. Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

随机推荐

  1. CSS命名格式

    CSS样式命名整理页面结构 容器: container/wrap整体宽度:wrapper页头:header内容:content页面主体:main页尾:footer导航:nav侧栏:sidebar栏目: ...

  2. ASP.NET Ajax 简单实例

    本实例讲解Ajax 调用WCF服务. 1.建立一个网站,并在其中添加一个WCF服务(这里需要选择Ajax-Enabled WCF Service). 2.IDE会自动生成一个SVC文件. 3.服务代码 ...

  3. swift选择类或结构体

    按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体: 结构体的主要目的是用来封装少量相关简单数据值. 有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用. ? 任何在结 ...

  4. 3ds max画曲线 设置摄像机的起始位置

    参考 http://www.3dmax8.com/3dmax/2013/0916/5661.html 如果想创建曲线段,可以在单击下一个点时按住鼠标不放,继续拖曳,再拖到另一个点上,单击鼠标右键,即可 ...

  5. !gluLookAt与glOrtho 参数解析

    void gluLookAt( GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLd ...

  6. Innodb之拷贝InnoDB表从一服务器到另一台服务器

    将Innodb类型的表从一台服务器拷贝到另一台服务器,或从一个库拷贝到另一个库. 前提是:innodb_file_per_table =ON. 1 先在目标服务器(库)上创建一个相同的表结构. 如: ...

  7. oracle dataguard (一)

    一.什么是data guard及data guard的工作原理 Data Guard 是一个集合,由一个primary数据库(生产数据库)及一个或多个standby数据库(最多9个)组成.组成Data ...

  8. 柔性数组 data[0]

    struct MyData {    int nLen;    char data[0];}; 在结构中,data是一个数组名:但该数组没有元素:该数组的真实地址紧随结构体MyData之后,而这个地址 ...

  9. Clr Via C#读书笔记---垃圾回收机制

    #1 垃圾回收平台的基本工作原理: 访问一个资源所需的具体步骤: 1)调用IL指令newobj,为代表资源的类型分配内存.在C#中使用new操作符,编译器就会自动生成该指令.2)初始化内存,设置资源的 ...

  10. 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)

    1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...