转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Delphi Implementation MVC         ★★★★

Delphi Implementation MVC

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1596 更新时间:2009/4/23 18:30:27
sp;   OnChanged : TNotifyChange;        // Vereinbarung einer
    ...                               // Referenzvariablen/Ereignismethode
  end;

IMPLEMENTATION
// ======================================================================
...
procedure TPerson.SetGroesse (gr : real);
(* ----------------------------------------- *)
begin
  Groesse := gr;
  if assigned(OnChanged)             // Ereignis auslösen 
  then OnChanged;      
            
end;

procedure TPerson.Abnehmen;
(* ----------------------------------------- *)
begin
  Gewicht := Gewicht - 1;
  if assigned(OnChanged)              // Ereignis auslösen
  then OnChanged;
                    
end;

...
END. // ----- UNIT -------

 

In der GUI-Klasse sorgt die Methode Person.OnChanged in FormCreate dafür, daß bei jedem Event die GUI-Methode MaskeAktualisieren ausgeführt wird.

Leider kann das in bestimmten Fällen zu Problemen führen. Editfelder, die sich gut für kombinierte Ein- und Ausgabe eignen, dürfen nicht für die Ausgabe von Rechenoperationen angesprochen werden; es sind also andere GUI-Komponenten dafür erforderlich. Die korrekte Initialisierung von Gewicht und Groesse
mit 0 führt zu einer Exception wegen der unerlaubten Division durch Null bei Errechnung des BMI.
Reine Textfelder sind unproblematisch.

unit uFenster;

INTERFACE
// ======================================================================
uses
  ...
  uPerson;

type
  TFensterFrm = class(TForm)
    GroesseLbl : TLabel;
    ...
   
    procedure FormCreate (Sender: TObject);
    procedure updModelBtnClick (Sender: TObject);
   
procedure AbnehmBtnClick (Sender: TObject);
   
procedure EndeBtnClick (Sender: TObject);

   private
    Person : TPerson;              // ---  Model PERSON
    procedure Init;
    procedure DatenAktualisieren;  // --- hier der Datentransport
    procedure MaskeAktualisieren;
   public
  end;

var
  FensterFrm: TFensterFrm;

IMPLEMENTATION
// ======================================================================
{$R *.DFM}

procedure TFensterFrm.FormCreate(Sender: TObject);
// ----------------------------------------------------------------------
begin
  FensterFrm.Init;
  Person := TPerson.Create;
  Person.OnChanged := MaskeAktualisieren; // Methodenzeiger mit Methode
end;                                      // verknüpfen

...
procedure TFensterFrm.DatenAktualisieren;
// ----------------------------------------------------------------------
// wie vorher

...
procedure TFensterFrm.updModelBtnClick(Sender: TObject);
// ----------------------------------------------------------------------
begin
  DatenAktualisieren;
end;

procedure TFensterFrm.MaskeAktualisieren;
// ----------------------------------------------------------------------
begin
  NameEdt.Text := Person.GetName;
  BmiEdt.Text  := FloatToStr(Person.HatBMI);
end;

procedure TFensterFrm.AbnehmBtnClick(Sender: TObject);
// ----------------------------------------------------------------------
begin
  Person.Abnehmen;
end;                                     

end. // ------ UNIT -------

Bewertung

1. Polling

Manuelles Polling (1.1. und 1.2) haben sich seit 10 Jahren im Unterricht bewährt und sind unaufwendig. An unserer Schule werden alle Programme, beginnend im Anfangsunterricht mit einer Fachklasse bis zu großen Projekten, in dieser Weise von den Schülern bearbeitet. Die Datenklassen sind frei von jeder technischen Erweiterung. Das erlaubt eine sehr einfache und klare OOA und Implementierung.

2. Observer Pattern Design

Viel Technik, wenig Erkenntnisgewinn (s.o.). Der Programmieraufwand pro observiertem Objekt ist so umfangreich, daß er sich für den Unterricht verbietet, wenn Schüler den kompletten Observer-Code schreiben sollten, zumal das durchaus nicht trivial ist. Eine Möglichkeit wäre, das ganze Paket als Bibliothek abzulegen.
Bei dieser als auch der dritten Variante bleiben Fachklassen nicht von proprietärem Code frei, der sie mit dem Betriebssystem verknüpft, was einer Portierung im Wege steht. Der schöne Anspruch, das in Fachklassen auch nur Anwendungsdaten und Anwendungslogik enthalten sein sollen, ist dahin.

3. Selbstgeschriebene Ereignisroutinen

Die selbstgeschriebene Ereignissteuerung ist eher eine Bastlerlösung. TNotifyChange ist ein Prozedurtyp, ein ebenso mächtiges wie undurchsichtiges Konstrukt. Onchange eine Prozedurvariable, also gleichermaßen Attribut und Prozedur und damit proprietär belastet. Die o. g. Restriktionen und Fehler lassen Zweifel an einen routinemäßigen Einsatz im Unterricht aufkommen.


-------------------
Literatur u. Links

  Hilfehandbuch Delphi 7
  Amrhein, B.: Designpattern für Graphische Benutzeroberflächen
                     http://www.hta-be.bfh.ch/~amrhein/Skripten/Swing/Pattern.pdf
  Höstklint, C.: Simple Observer Pattern
                      http://www.delphi3000.com/member.asp?ID=9713
  Paulus, H.: Das MVC-Konzept. (Schöne Präsentation)
               http://informatikag.bildung-rp.de/assets/download/D1-Paulus-Farben.pps


 

©    15. Oktober 2004    Siegfried Spolwig

Seitenanfang

上一页  [1] [2] 


[系统软件]InstallShield Express for delphi制作安装程序定…  [常用软件]InstallShield Express制作Delphi数据库安装程序
[Delphi程序]为什么选择Delphi.Net ?  [Delphi程序]《关于VisiBroker For Delphi的使用》(4)
[Delphi程序]Delphi 程序员代码编写标准指南  [Delphi程序]转贴:Conversion to Delphi 6: Missing unit Pro…
[Delphi程序]Borland Delphi 9 的新特性  [Delphi程序]Delphi 键盘码表
[Delphi程序]Chuck Jazdzewski的离开意味着Delphi的终结吗?  [Delphi程序]Delphi Access violations 问题的解决之道
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台