组件开发方式

原创 2003年01月15日 09:20:00
 

在Te2和IWS的开发过程中,我终于体会到了采用组件开发的方式给我带来的非凡的快乐巨大的痛苦,一方面,我可以简单的拖拉几个组件放在Form或者DataModule上,设置一下属性,接着我就可以按F9来Run了。另一方面,我常常陷于莫名其妙的AV错误中,一不小心就会把我的Delphi搞崩溃。但是,只要我们搞清楚了创建组件的一些基本方法,那么就可以小心的避开组件开发过程中的种种陷阱。在阅读这篇文章之前,我建议大家可以先读:

  1. Delphi爱好者上的:Form Class To Component,这篇文档告诉我们创建组件的基本方法
  2. Creating Components Dynamically,这篇文档告诉我们使用组件的正确方法
  3. Dynamic Component Creation Gotcha (Don't Do This),这篇文档告诉我们使用组件的负作用
  4. Reuse through Inheritance and Composition,这篇文档告诉我们如何设计组件
  5. 10 guidelines to help you design for reuse,这篇文档也告诉我们设计组件一些可以操作的办法

我写这篇文章的目的是希望我们能从过去的RAD开发方式中转变成基于组件的开发方式,但是这篇文档并不告诉大家如何写组件,及写组件的一些方法,因为那几乎可以写成一本书了。

为什么用组件?

现在开发领域中比较热门的话题是OO及基于OO的更加偏重于问题域的Patterns,在我刚刚开始使用Delphi的时,我常常自问:我采用了OOP吗?让我们来看看使用Delphi 开发的标准方式:往Form或DataModule上放置几个组件,写几个事件,按F9 Run 。是的,RAD令我愉快的编程,但是它不会导致我认真设计

  • 开始阶段代码并不会复杂,好多时候我们会把一些通用的代码拷贝到程序的各个地方,而且这些代码看起来好象不能复用,最简单的例子就是:在某个Action的Execute事件中我创建一个Query,执行一个SQL,在另一个Action的Execute事件中我又会创建一个Query去执行另一个SQL,这里有没有什么办法来抽象创建Query的过程
  • Object Inspector非常好用,我可以非常容易的写事件处理逻辑,但是这会把逻辑和Form或DataModule紧紧绑定。尽管把业务逻辑写在DataModule中是Delphi推荐的方式,但它的复用程度并不怎么好,想想在一个DataModule中放置几十个数据集的情况,你还能说这个DataModule可以复用吗

所以,我推荐使用基于组件的编程,Why,让我们看看Form Class To Component中写到使用组件的三个优点:

  1. Delphi有一套组件的动态创建和销毁的机制,反之,TObject的派生类必须显式的在代码中创建、使用、销毁
  2. 你可以在设计时设置属性,不要小看这个优点,我们可以开发出属性编辑器,可以让用户只能选择合法的属性值
  3. 对于可视组件,你可以在设计时设置组件的位置和大小

这只是显而易见的优点,它只是表象,隐藏在这些优点下面的精髓是:OOP。Delphi提供了一个组件框架,所以当你开始试图通过写组件来简化编程的时候,你就会不知不觉的采用OO的编程方法。最为重要的是VCL框架采用了许多让程序易于重用的设计模式:

  1. Composite 模式:当你在Form上放置各种组件,组成一个新的TForm的派生类,你用到了Composite 模式
  2. Builder 模式:当你创建你定义的Form时,你会使用Builder模式,通常Builder模式创建的对象是由Composite模式组成的。
  3. Template Method 模式:这个模式太普遍了,任何一个从TComponent的派生的类,都会使用该模式!
  4. Mediator 模式 :当你写事件时,你用的正是Mediator 模式,注意了Mediator 模式中的缺点就是:它会使中介者为一个庞然大物
  5. Singleton 模式:尽管没有任何机制阻止我们创建多个TApplicaion对象,但是我们知道任何一个GUI程序只能有一个TApplcaiton对象,那就是全局变量Applicaion

当你开发组件时,你已经开始使用OOP,并且将会使用上面的五种模式。至少从理论上已经保证你的代码是可以重用的,你的程序是易于更改从而适应更多的需求。


Mail To:Me

javascript组件开发方式

作为一名前端工程师,写组件的能力至关重要。虽然javascript经常被人嘲笑是个小玩具,但是在一代代大牛的前仆后继的努力下,渐渐的也摸索了一套组件的编写方式。 下面我们来谈谈,在现有的知识体系...
  • bingqingsuimeng
  • bingqingsuimeng
  • 2015年03月19日 09:24
  • 18569

js组件开发方式详解

转自这里 作为一名前端工程师,写组件的能力至关重要。虽然JavaScript经常被人嘲笑是个小玩具,但是在一代代大牛的前仆后继的努力下,渐渐的也摸索了一套组件的编写方式。 下面我们...
  • yingzizizizizizzz
  • yingzizizizizizzz
  • 2017年05月04日 22:29
  • 397

如何选择合适的项目开发方式

先引用名言:任何优劣都是没有意义的,只有在适合的情况下采取合适的方式才能收获最大的利益。 谈一下自己对于项目团队的看法:...
  • u014369857
  • u014369857
  • 2016年06月29日 22:26
  • 604

RMI的开发步骤

I的概念 RMI(Remote Method  Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外 一台...
  • happyzwh
  • happyzwh
  • 2014年07月01日 09:46
  • 367

webapp开发---后台框架 ci rest

上篇主要是了解  API 接口开发和网站开发其实区别很大,对于做网站开发php有很多框架,同样php 做API接口框架也有很多,这里选择 CI 的 rest 框架,复制下面这个链接,做一些了解,并下载...
  • liumeng305
  • liumeng305
  • 2015年07月23日 10:31
  • 397

vue.js原生组件化开发(一)——组件开发基础

前言 vue作为一个轻量级前端框架,其核心就是组件化开发。我们一般常用的是用脚手架vue-cli来进行开发和管理,一个个组件即为一个个vue页面,这种叫单文件组件。我们在引用组件之时只需将组件页...
  • yuanyuanispeak
  • yuanyuanispeak
  • 2017年06月21日 11:54
  • 662

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法

      简单的说,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分...
  • merrychinese
  • merrychinese
  • 2011年04月03日 00:00
  • 2206

Ajax开发与传统web开发方式

Ajax(英文缩写:Asynchronous   JavaScript  And  XML,即异步JavaScript和XML),把用户和Web页面间的交互与Web浏览器和服务器间的通信分离开来。 用...
  • u010121883
  • u010121883
  • 2015年01月31日 14:53
  • 1062

it公司开发模式

本文仅楼主个人从实际出发得出的观点, 小公司,限于预算的限制,大概就7,8个,加上开发和产品,在这种情况下,什么样的人员结构最合适: 所有it公司其实就两种开发模式,1,英雄模式,2,扁平模式,要么就...
  • strife
  • strife
  • 2017年01月23日 09:15
  • 260

传统的三层架构

三层架构    三层架构可以说已经是一个比较成熟的分层架构模型,但是还是有部分人弄不清三层架构是怎么回事。就我认识的人之中,有一个被大家认为学的不错的一个同学竟然有一天问老师什么是三层架构。不是说这个...
  • jianxin160
  • jianxin160
  • 2010年03月29日 19:20
  • 3647
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:组件开发方式
举报原因:
原因补充:

(最多只允许输入30个字)