我怎么能在C#中重构这个方法?

时间:2014-04-08 11:42:09

标签: c# refactoring

我有一些代码需要重构才能在很多地方使用。所以我尝试了一些解决方案,但总是以重复和混乱的代码结束。所以,我决定问什么是最好的解决方案。

此代码用于计算电子商务项目中的销售价格。我的目标是在方法中加入一些代码,这些代码不会随着时间的推移而改变,或者更好地说,只能从一个地方进行管理。这部分是考虑根据一些比较设定销售价格。 并且在这个比较中出现了问题。我还想根据这个结果做一些像Label这样的控件,就像设置货币代码一样。货币代码有时以美元为单位,有时以美元为单位。所以,这意味着我应该以某种方式隔离这个货币代码。

简而言之,我想重构此货币代码并根据计算的销售价格格式化控制。

因此,我使用产品帐户属性以及方法 SetBasketPayment 创建 BasketHelper 类,返回我设置的属性在这种方法中。基本上,我使用此方法对产品帐户类的属性进行分组,而不是返回值。

这是我的代码。如有任何进一步的解释,我会根据您的要求提供。

public class BasketHelper
{
    public Product _product { get; set; }
    public Account _account { get; set; }


public BasketHelper SetBasketPayment(Product product, Account account, HyperLink lblIconOnSale, Label lblSalePrice, Label lblListPrice, HyperLink lblIconCampaign)
{
    decimal _brandAccountDiscountRate = default(decimal);
    decimal _accountDiscount = default(decimal);

    if (HttpContext.Current.Request.IsAuthenticated)
    {
        MembershipUser mUser = Membership.GetUser();
        if (mUser != null)
        {
            account = Account.GetAccountByUserId((Guid)Membership.GetUser().ProviderUserKey);
            try
            {
                _accountDiscount = account.DiscountRate;
            }
            catch (Exception ex) { }

            BrandAccountDiscount brandAccountDiscount = BrandAccountDiscount.GetBrandAccountDiscountByUserAndBrandId(product.BrandId, mUser.ProviderUserKey.ToString());
            if (brandAccountDiscount != null)
            {
                _brandAccountDiscountRate = brandAccountDiscount.DiscountRate;
            }
        }
    }

    decimal currencyMultiplier = Currency.GetCurrencyValue(product.CurrencyCode);
    decimal _listPriceTL = product.ListPrice * currencyMultiplier;


    decimal _productCampaignPrice = _listPriceTL * (1 - product.DiscountRate / 100);
    decimal _accountPrice = _listPriceTL * (1 - _accountDiscount / 100);
    decimal _brandPrice = _accountPrice * (1 - _brandAccountDiscountRate / 100);

    lblListPrice.Text = product.ListPrice.ToString("N2") + " " + product.CurrencyCode;

    if (product.DiscountRate > 0)
    {
        product.SalePrice = _productCampaignPrice;

        lblSalePrice.Text = _productCampaignPrice.ToString("C2") + " + KDV";
        lblListPrice.CssClass += " strike";
        lblIconCampaign.Text = "+%" + product.DiscountRate.ToString("N0");
        lblIconCampaign.Visible = true;
    }
    else
    {
        if (_accountPrice < _listPriceTL)
        {
            product.SalePrice = _accountPrice;

            lblIconOnSale.Text = "%" + _accountDiscount.ToString();
            lblIconOnSale.Visible = true;
        }

        if (_brandAccountDiscountRate > 0)
        {
            product.SalePrice = _brandPrice;

            lblSalePrice.Text = _brandPrice.ToString("C2") + " +KDV";
        }
    }

    return new BasketHelper
    {
        _product = product,
        _account = account
    };
}

}

0 个答案:

没有答案