走向.NET架构设计—第三章—分层设计,初涉架构(中篇)
本篇的议题如下:1. 阐明示例需求2. 业务层设计3. 服务层设计4. 数据访问层设计5. 显示层设计6. UI 层设计
{
decimal ApplyExtraDiscountsTo( decimal OriginalSalePrice);
}
代码
{
public decimal ApplyExtraDiscountsTo( decimal OriginalSalePrice)
{
decimal price = OriginalSalePrice;
price = price * 0.6M ;
return price;
}
}
{
public decimal ApplyExtraDiscountsTo(decimal OriginalSalePrice)
{
return OriginalSalePrice;
}
}
代码
{
private IDiscountStrategy _discountStrategy = new NullDiscountStrategy();
private decimal _rrp;
private decimal _sellingPrice;
public Price( decimal RRP, decimal SellingPrice)
{
_rrp = RRP;
_sellingPrice = SellingPrice;
}
public void SetDiscountStrategyTo(IDiscountStrategy DiscountStrategy)
{
_discountStrategy = DiscountStrategy;
}
public decimal SellingPrice
{
get { return _discountStrategy.ApplyExtraDiscountsTo(_sellingPrice); }
}
public decimal RRP
{
get { return _rrp; }
}
public decimal Discount
{
get {
if (RRP > SellingPrice)
return (RRP - SellingPrice);
else
return 0 ;}
}
public decimal Savings
{
get {
if (RRP > SellingPrice)
return 1 - (SellingPrice / RRP);
else
return 0 ;}
}
}
{
public int Id { get ; set ; }
public string Name { get ; set ; }
public Price Price { get ; set ; }
}
{
Standard = 0 ,
Trade = 1
}
代码
{
public static IDiscountStrategy GetDiscountStrategyFor(CustomerType customerType)
{
switch (customerType)
{
case CustomerType.Trade:
return new TradeDiscountStrategy();
default :
return new NullDiscountStrategy();
}
}
}
{
IList < Product > FindAll();
}
代码
{
public static void Apply( this IList < Product > products, IDiscountStrategy discountStrategy)
{
foreach (Product p in products)
{
p.Price.SetDiscountStrategyTo(discountStrategy);
}
}
}
代码
{
private IProductRepository _productRepository;
public ProductService(IProductRepository productRepository)
{
_productRepository = productRepository;
}
public IList < Product > GetAllProductsFor(CustomerType customerType)
{
IDiscountStrategy discountStrategy = DiscountFactory.GetDiscountStrategyFor(customerType);
IList < Product > products = _productRepository.FindAll();
products.Apply(discountStrategy);
return products;
}
}
代码
{
public int ProductId { get ; set ; }
public string Name { get ; set ; }
public string RRP { get ; set ; }
public string SellingPrice { get ; set ; }
public string Discount { get ; set ; }
public string Savings { get ; set ; }
}
{
public CustomerType CustomerType { get ; set ; }
}
public class ProductListResponse
{
public bool Success { get ; set ; }
public string Message { get ; set ; }
public IList < ProductViewModel > Products { get ; set ; }
}
代码
{
public static IList < ProductViewModel > ConvertToProductListViewModel( this IList < Model.Product > products)
{
IList < ProductViewModel > productViewModels = new List < ProductViewModel > ();
foreach (Model.Product p in products)
{
productViewModels.Add(p.ConvertToProductViewModel());
}
return productViewModels;
}
public static ProductViewModel ConvertToProductViewModel( this Model.Product product)
{
ProductViewModel productViewModel = new ProductViewModel();
productViewModel.ProductId = product.Id;
productViewModel.Name = product.Name;
productViewModel.RRP = product.Price.RRP;
productViewModel.SellingPrice = product.Price.SellingPrice;
if (product.Price.Discount > 0 )
productViewModel.Discount = product.Price.Discount;
if (product.Price.Savings < 1 && product.Price.Savings > 0 )
productViewModel.Savings = product.Price.Savings.ToString( " #% " );
return productViewModel;
}
}