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

框架其实就是一种开发模式,用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. HDU 5884 Sort -2016 ICPC 青岛赛区网络赛

    题目链接 #include <iostream> #include <math.h> #include <stdio.h> #include<algorith ...

  2. September 1st 2016 Week 36th Thursday

    Everything is going on, but don't give up trying. 万事随缘,但不要放弃努力. There are numerous things that we ca ...

  3. 关于Visual Studio 2013 编译 multi-byte character set MFC程序出现 MSB8031 错误的解决办法

    转自:http://blog.csdn.net/xiaochunzao/article/details/16987703 Visual Studio 2013 编译旧的 multi-byte char ...

  4. 解决eclipse Maven 主项目不能刷新maven

    项目->.project -> 增加<?xml version="1.0" encoding="UTF-8"?><projectD ...

  5. iOS中的两种主要架构及其优缺点浅析

    凡是程序的开发者,应该对程序的架构都不陌生.一个程序的架构的好坏对这个程序有着非常重要的作用.今天我们来看一下iOS开发中用要的两种主流的程序架构.这个过程中我们主要以例子的形式展开. 我们来看第一种 ...

  6. 数据结构和算法 – 4.字符串、 String 类和 StringBuilder 类

    4.1.String类的应用 class String类应用 { static void Main(string[] args) { string astring = "Now is The ...

  7. HTML5 – 1.基础

    新网页结构 1.<header> 定义了文档的头部区域 2.<nav>标签定义导航链接的部分. 3.<article>定义页面独立的内容区域. 4.<sect ...

  8. 设计模式学习之命令模式(Command,行为型模式)(12)

    一.命令模式的定义 命令模式属于对象的行为型模式.命令模式是把一个操作或者行为抽象为一个对象中,通过对命令的抽象化来使得发出命令的责任和执行命令的责任分隔开.命令模式的实现可以提供命令的撤销和恢复功能 ...

  9. Android 线程更新UI报错 : Can't create handler inside thread that has not called Looper.prepare()

    MainActivity中有一个按钮,绑定了save方法 public void save(View view) { String title = titleText.getText().toStri ...

  10. C# SMTP邮件发送 分类: C# 2014-07-13 19:10 334人阅读 评论(1) 收藏

    邮件发送在网站应用程序中经常会用到,包括您现在看到的博客,在添加评论后,系统会自动发送邮件通知到我邮箱的,把系统发送邮件的功能整理了下,做了一个客户端Demo,希望对有需要的童鞋有所帮助: 核心代码: ...