我有一些代码需要重构才能在很多地方使用。所以我尝试了一些解决方案,但总是以重复和混乱的代码结束。所以,我决定问什么是最好的解决方案。
此代码用于计算电子商务项目中的销售价格。我的目标是在方法中加入一些代码,这些代码不会随着时间的推移而改变,或者更好地说,只能从一个地方进行管理。这部分是考虑根据一些比较设定销售价格。 并且在这个比较中出现了问题。我还想根据这个结果做一些像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
};
}
}