2010-12-01 15 views
0

に応じて、私はと呼ばれるいずれかのGUIから、または非グラフィカル環境「伝える」ための最も便利なベストプラクティスの方法は何ですか(バッチモード)
変更コードの動作状況

を形成することができるクラスを持っていますコードのGUI関連部分は、バッチモードで実行されても実行されません。

私は

public MyMethod() 
    {    
     [@TAG: DOTHIS_ONLY_IF_GUIMODE] 
     ShowPanels(); 
     .... 
    } 

のようなものを考えるとGUI_MODE_ACTIVATEDは、プログラムが

から呼び出された場所に応じて、私は場合は醜いトレースを避けたい、どこかのランタイム上でtrueまたはfalseに設定されます/他のものが私のコード全体に散らばっています。
私の小さな親指は私にAOPが行く方法を教えてくれます。(もっと簡単な方法を見つけたら、私はそれに行きます)
これを行うための最も簡単で簡単な方法は何ですか?

更新: 最も貢献者が指摘したように、ビジネスコードからGUIコードを分離することは経験則がある、しかし、私はまだNO GUIがに関与している場合でも、これを行う方法を知ることに興味を持っています(すなわち、バッチモードで実行したときに実行しないコードのGUI関連の部品を「伝える」ための最も便利なベストプラクティスの方法は何例えば、2つの異なる環境のための2つの異なるバッチモード)

答えて

3

私はあなたの最善の策は、クラスからGUI固有のコードを取り出し、クラスの処理でキー時にトリガーされたイベントを実装することだと思います。 GUIによって呼び出されると、GUIコードはそれらのイベントを購読し、「正しいことをします」。バッチコードはイベントを無視し、すべて正常です。

+0

パーフェクト!私はすでに何らかの形で(ShowPanelsメソッドが実際にイベントを発生させています)、何らかの理由でバッチモードでそのイベントを購読していないときにNullPointer例外を取得するので、そのオプションの有効性が疑われました。コードをより詳細にチェックします。 –

+1

それを呼び出す前にnullのイベントを確認してください – n8wrl

+1

これはまさに私が提案しようと考えていたものです。 – mlibby

0

これは、ビジネスロジックの問題をUIの懸念事項から分離する理由です。

これを行うには単純で最も簡単な方法は何ですか?

UIの懸念からビジネスロジックの懸念が分離されています。

+0

私はそれを知っていますが、本当の選択はありません。私はそれに対処しなければならないレガシーコードを持っています。 –

+0

@Mika Jacobi:あなたは何をしているのですか?今は明らかにリファクタリングしています。 – jason

+0

これより少し複雑ですが、アプリケーションのアーキテクチャはかなり固いものです。私はすべての結果をマスターしていません(そのコードは当分範囲外の他のアプリケーションによって呼び出されます)ので、私は慎重であることを好みます。 –

0

最も簡単で最も簡単な方法は、ifステートメントを使用することです。

単純ではありませんが、より構造化された方法は、ShowPanelsメソッドを抽象化して、GUIモード用とバッチモード用の2つのクラスを生成することです。

+0

あなたが言った2番目のアイデアは面白いです。私が見る唯一の欠点は、それがクラスのコピーを2つ持っていることです。 –

+0

いいえ:一般的なロジック(うまくいけばほとんどのコード)が基本クラスに存在します。派生クラスには、GUIモードまたはバッチモードのいずれかに固有のロジックのみが含まれます。 –

+0

沖電気!それは私のポストでの更新に役立ちます。 Thanx –

0

Add Aspects to Object Using Dynamic Decorator

クラスは、プレゼンテーションではないビジネスロジック(GUIまたはバッチなど)のみに関係している必要があります。実行時に、必要に応じてクラスのオブジェクトにプレゼンテーション(GUIまたは非GUI)コードを添付することができます。

クラス定義に醜い属性コードを持つ必要はありません。

関連する問題