2

このプログラミング手法についてどう思いますか: - 最初のフォームで 1 つのトランザクションを実行し、その後、別のフォームに配置されたいくつかの更新を強制する必要があります (別のフォームに表示されるアイテムごとに)。つまり、そのフォームを表示して、いくつかのボタンをクリックするようなものです。これらの機能は第 2 フォームから実行することが必須であるため、第 2 フォームを表示せずに行うことにしました。それは優れたプログラミング手法ですか、それとも他に推奨事項はありますか?

また、2 番目のフォームのShowModalの前にproperty> Visible:=Falseを設定するだけで十分ですか、それとも他のアクションを実行する必要がありますか?

4

2 に答える 2

6

まぁ、見せない形って珍しいですよね。通常、UI からビジネス ロジックを分離します。

あなたの質問に答えるために、ShowModal を呼び出す必要はまったくないと思います。フォーム クラスにメソッドを定義して呼び出すだけです。最終的にフォームは単なる Delphi オブジェクトであり、そのまま使用できます。それらを表示したくない場合は、ShowModal または Show を呼び出さないでください。

于 2011-03-18T10:58:59.150 に答える
2

最初の2番目の質問:Visible := FalseすべてのShowXXXメソッドのポイントはフォームを表示することであるため、設定は役に立ちません。Davidが言うように、Showをまったく呼び出さなくてもアクションを実行できます。もちろん、フォームが適切に機能するためにコードに依存しないOnActivate場合に限ります。OnShow

これが良い考えかどうかについては、私はノーと言います!

  • すでに指摘したように、注意しなければならない懸念があります。つまり、現在(または将来のある時点でのメンテナンスのために)、フォームは適切に機能するために表示されることに依存しています。
  • もちろん、フォームをちらつきさせてプログラムで閉じることで、この問題を回避できます。明らかに審美的に悪い選択です。
  • それを正しくすることの問題は言うまでもありません。次のことを行う必要があるときに、必要なことを実行できるようにフォームをラップするパッチワークコードを大量に作成することになります...

正しいアプローチ

  • あなたのフォームは現在、少なくとも2つの異なることを行っています。
    • ビジュアルUIコントロール(Aと呼びます)
    • および「必須機能」(Bと呼びます)
  • Bが検証ルールを実行しているのか、追加の処理を実行しているのかなどは関係ありません。
  • Bは、ユーザーの操作を必要としないプロセスです。
  • したがって、次のことを行う必要があります。
    • BをUI以外の場所(カスタムオブジェクトまたはデータモジュールを備えた単純なユニット)にコピーします。それをB*と呼ぶ
    • Bを使用する代わりにB*を呼び出すようにフォームを変更します。
    • フォームがまだ正しく動作することをテストします。
    • Bを削除
    • これで、代わりに新しいフォームでB*を呼び出すことができます。

上記のアプローチは、将来の大きな頭痛の種を救うでしょう。

于 2011-03-18T18:56:48.820 に答える