[转]Tangram框架应用开发的一般模式
//转的,怕想百度博客一样搬家,赶紧先复制下来。
框架其实就是一种开发模式,用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框架应用开发的一般模式的更多相关文章
- 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组
真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...
- Navi.Soft30.框架.WinForm.开发手册
阅读导航 Navi.Soft30.Core类库.开发手册 http://www.cnblogs.com/xiyang1011/p/5709489.html Navi.Soft30.框架.WinForm ...
- 浅析Thinkphp框架中运用phprpc扩展模式
浅析Thinkphp框架中应用phprpc扩展模式 这次的项目舍弃了原来使用Axis2做web服务端的 方案,改用phprpc实现,其一是服务端的thinkphp已集成有该模式接口,其二是phprpc ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(四)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(四) 使用 CI 简化数据库开发你学习CI 是因为你想要使编程更容易和更有生产力.这一章讲述CI的Active Record类. 如果C ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(一)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(一) 对 CodeIgniter 的介绍大多数PHPer都想写出运行状态良好的应用程序,而且希望尽可能做得简单且不费事.这篇文章是有关 ...
- 使用Maven搭建Struts2框架的开发环境
一.创建基于Maven的Web项目
- Java EE互联网轻量级框架整合开发— SSM框架(中文版带书签)、原书代码
Java EE互联网轻量级框架整合开发 第1部分 入门和技术基础 第1章 认识SSM框架和Redis 2 1.1 Spring框架 2 1.2 MyBatis简介 6 1.3 Spring MVC简介 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
随机推荐
- C++静态代码分析工具对比cppCheck与PreFast
具体内容参看文件<CppCheck和PreFast对Cplusplus代码静态分析测试.zip> C++测试源代码main.cpp #define NULL 0 #include < ...
- Android 中的缓存机制与实现
Android开发本质上就是手机和互联网中的web服务器之间进行通信,就必然需要从服务端获取数据,而反复通过网络获取数据是比较耗时的,特别是访问比较多的时候,会极大影响了性能,Android中可通过二 ...
- 同一内网不能网段ping 不通
[root@NB sysconfig]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use ...
- weblogic监控
http://wenku.baidu.com/link?url=tQPQ-dgm7NOkEGj_vemwtsPd6TJ6W3x6_0UBLgw61N982SwPlz-QFxqncsmPGqHwJAEF ...
- ARPPING
http://www.tuicool.com/articles/M7B3umj http://lixcto.blog.51cto.com/4834175/1571838/
- log4j设置日志格式为UTF-8
想要log4j输出的日志文件的编码格式为UTF-8.正常情况下只需要添加下述的代码即可: log4j.appender.appender_name.Encoding=UTF-8 但是在spring与l ...
- SVN-简要说明
SVN官方推荐在一个版本库的根目录下先建立trunk.branches.tags这三个文件夹,其中trunk是开发主干,存放日常开发的内容:branches存放各分支的内容,比如为不同客户定制的不同版 ...
- PHP保留小数位的三种方法
/** * PHP保留两位小数的几种方法 * @link http://www.phpddt.com */ $num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 echo ...
- JS常用语句
JavaScript常用语句 1.document.write(""); 输出语句 2.JS中的注释为 // 3.传统的HTML文档顺序是: document-& ...
- 初识VSTO Addin开发
这篇博客将简单介绍一些VSTO Addin开发的知识. 1. VSTO是什么?我们可以用VSTO做什么? VSTO全称Visual Studio Tool for Office,是可以让我们针对现有的 ...