1

電卓アプリケーションを作成しています。ビジネス ロジックを UI から分離して、コードの保守性を改善し、単体テストを改善しようとしています。

ユーザーがアプリケーションのさまざまなボタンをクリックしたときに何が起こるかを管理する CalculatorUI クラスを作成しました。

また、計算を実行する Calculator クラスも作成し、ユーザーの要件に基づいて計算結果を検証します。CalculatorUI は、Calculator クラスのインスタンスを作成し、Calculator クラスの関数を呼び出して、ユーザーのクリックに応答します。私の質問は、Calculator クラスで、テキスト ボックスをクリアしてメッセージ ボックスを表示し、無効な結果をユーザーに認識させるコードをどのように記述すればよいかということです。

私はプログラミングを始めたばかりで、同僚の 1 人 (上級レベルのプログラマー) によると、UI をビジネス ロジックおよびデータベースから分離しておくのがベスト プラクティスです。

「txtDisplay」と「resultValue」が現在のコンテキストに存在しないというエラーが表示されます...また、ブール変数をどのように使用すればよいですか?

電卓クラスの私のコードは次のとおりです。

class Calculator
{
    public double Addition(double value1, double value2)
    {
        double result = 0;

        result = value1 + value2;
        return result;
    }

    public double Subtraction(double value1, double value2)
    {
        double result = 0;

        result = value1 - value2;
        return result;
    }

    public double Multiplication(double value1, double value2)
    {
        double result = 0;

        result = value1 * value2;

        return result;
    }

    public double Division(double value1, double value2)
    {
        double result = 0;

        result = value1 / value2;

        return result;
    }

    public bool CalculationValidation(double result)
    {
        bool isValid;
        bool isFalse;
        // determine if the initial result is within the specified range
        if ((result < -4000000000) || (result > 4000000000))
        {
            MessageBox.Show("The result is too large or small to be displayed.");
            txtDisplay.text = "0";
            resultValue = 0;
            return;
        }

        // round the result if necessary
        string test = result.ToString();
        if (test.Contains("."))
        {
            test = (Math.Round(double.Parse(test), 10 - test.Split('.')[0].Count())).ToString();
        }
        else if (test.Length > 10)
        {
            test = (Math.Round(double.Parse(test), 10).ToString());
        }

        txtDisplay.Text = test;
    }
}
4

1 に答える 1

1

電卓クラスで例外を発生させ、UI で例外をキャッチし、リセットを実行してメッセージを表示できます。メッセージを表示し、表示を 0 に設定するのは UI ロジックです。この場合、それは分離する良い方法です。

このように、UI はビジネス ロジック (Calculator クラス) に依存しますが、Calculator クラスには UI に関する知識がありません。目的は、すべての依存関係がドメイン オブジェクトに向かって内部を指すようにすることです。

より複雑なドメインを分離するには、Facade、Command、および Observer パターンを検討することをお勧めします。

于 2014-10-15T18:24:31.770 に答える