0

条件付き計算を実行するコードがたくさんあります。ユーザーは UI (ドロップダウン、ラジオ ボタンなど) で選択を行い、その選択に基づいて結果を計算します。以前は、ViewBag を使用して計算結果をビューに表示していました。しかし、今はNHibernateを使用してこれらを保存したいのですが、計算結果を保存するものに変換するのに苦労しています。これが完全な書き直しを必要としないことを望んでいました。

Calculate.cs で以前に行っていたことの例を次に示します (1 つの条件の例 - 注: PriceQuote.cs は値を保持するだけです)。

public decimal decSpouseFilingChapter7(QuoteViewModel quoteData)
{
    if (quoteData.QuotePartRecord.MaritalStatusDropDown == 
        MaritalStatus.Yes && 
        quoteData.QuotePartRecord.SpouseFilingRadioButton == 
        SpouseFiling.No)
            return PriceQuote.priceNoSpouseFilingChapter7; // see below
    else if (quoteData.QuotePartRecord.MaritalStatusDropDown == 
        MaritalStatus.Yes && 
        quoteData.QuotePartRecord.SpouseFilingRadioButton == 
        SpouseFiling.Yes)
            return PriceQuote.priceSpouseFilingChapter7; // see below
    else
        return 0;
}

PriceQuote.cs は次のようになります (2 つだけを示していますが、100 以上の金額を保持しています)。

public static decimal priceNoSpouseFilingChapter7 { get { return 100; } }
public static decimal priceSpouseFilingChapter7 { get { return 300; } }

Calculate.cs のさらに先で、一連の条件の後、これを実行して計算結果を導き出します。

public decimal TotalChapter7(QuoteViewModel quoteData)
{
    decimal total = PriceQuote.priceChapter7;

    total += this.decSpouseFilingChapter7(quoteData);
    total += this.decPaymentPlanChapter7(quoteData);
    total += this.decProcessingChapter7(quoteData);
    total += this.decSubmissionChapter7(quoteData);
    total += this.decDistrictChapter7(quoteData);
    total += this.decUnsecuredCreditor(quoteData);
    total += this.decGarnishment(quoteData);
    total += this.decTaxLiability(quoteData);
    total += this.decRentalEviction(quoteData);
    total += this.decRealEstateChapter7(quoteData);
    total += this.decRealEstateIntention(quoteData);
    total += this.decVehicleChapter7(quoteData);
    total += this.decVehicleIntention(quoteData);
    total += this.decOtherAssetChapter7(quoteData);
    total += this.decOtherAssetIntention(quoteData);
    total += this.decFinancialAccount(quoteData);
    total += this.decMeansTestAnalysisChapter7(quoteData);

    return total;
}

ご覧のとおり、私が持っているものの長さを示すために、他のすべての条件を追加しました。これは合計の 1 つにすぎません。

私は次のようなことをしようとしget/setているので、これをどのように変換するかについてのサンプルコードを誰かが提供できますか:

public virtual decimal SpouseFilingChapter7
{
    get
    {
        return decSpouseFilingChapter7;
    }
    set
    {
        decSpouseFilingChapter7 = value;
    }
}

私は次のようなことをするかもしれません:

public virtual decimal TotalChapter7
{
    get
    {
        return SpouseFilingChapter7 + ...;
    }
}

しかし、それは明らかに間違っています。

助けてくれてありがとう。

4

1 に答える 1

0

NHibernate がこれと何をしなければならないかは明確ではありませんが、リファクタリングの可能性があります

class Calculate
{
    private QuoteViewModel _quoteData;
    private PriceQuote _prices;

    public Calculate(QuoteViewModel quoteData, PriceQuote prices)
    {
        _quoteData = quoteData;
        _prices = prices;
    }

    public decimal SpouseFilingChapter7
    {
        get
        {
            if (_quoteData.QuotePartRecord.MaritalStatusDropDown == MaritalStatus.Yes)
            {
                return _quoteData.QuotePartRecord.SpouseFilingRadioButton == SpouseFiling.Yes ?
                    _prices.priceSpouseFilingChapter7 :
                    _prices.priceNoSpouseFilingChapter7;
            }
            else
                return 0;
        }
    }

    public decimal TotalChapter7
    {
        get
        {
            return _prices.priceChapter7 +
                SpouseFilingChapter7 +
                PaymentPlanChapter7 +
                ProcessingChapter7 +
                SubmissionChapter7 +
                DistrictChapter7 +
                UnsecuredCreditor +
                Garnishment +
                TaxLiability +
                RentalEviction +
                RealEstateChapter7 +
                RealEstateIntention +
                VehicleChapter7 +
                VehicleIntention +
                OtherAssetChapter7 +
                OtherAssetIntention +
                FinancialAccount +
                MeansTestAnalysisChapter7;
        }
    }
}
于 2013-03-25T10:39:27.577 に答える