【发布时间】:2009-04-28 17:13:38
【问题描述】:
我没有其他开发人员可以寻求建议或“你怎么看 - 我在想 这个”所以如果你有时间,请阅读并告诉我你的想法.
展示比描述更容易,但该应用本质上就像一个销售点应用,具有 3 个主要部分:商品、订单商品和订单。
项目类是来自数据存储区的数据。
public class Item
: IComparable<OrderItem>, IEquatable<OrderItem>
{
public Int32 ID { get; set; }
public String Description { get; set; }
public decimal Cost { get; set; }
public Item(Int32 id, String description, decimal cost)
{
ID = id;
Description = description;
Cost = cost;
}
// Extraneous Detail Omitted
}
订单商品类是订单上的商品行。
public class OrderItem
: Item, IBillableItem, IComparable<OrderItem>, IEquatable<OrderItem>
{
// IBillableItem members
public Boolean IsTaxed { get; set; }
public decimal ExtendedCost { get { return Cost * Quantity; } }
public Int32 Quantity { get; set; }
public OrderItem (Item i, Int32 quantity)
: base(i.ID, i.Description, i.Cost)
{
Quantity = quantity;
IsTaxed = false;
}
// Extraneous Detail Omitted
}
目前,当您为订单添加费用或折扣时,它很简单:
Order order = new Order();
// Fee
order.Add(new OrderItem(new Item("Admin Fee", 20), 1));
// Discount
order.Add(new OrderItem(new Item("Today's Special", -5), 1));
我喜欢它,这是有道理的,Order 继承的基类会遍历列表中的项目,计算适当的税款,并允许其他 Order 类型的文档(其中有 2 个)从基类继承计算所有这些而不重新实现任何东西的类。如果一个订单类型的文档没有折扣,那就像不添加 -$ 值 OrderItem 一样简单。
我遇到的唯一问题是显示这些数据。进行此操作的表格有一个网格,其中应显示销售项目(即不是费用/折扣)。同样,某些费用和某些折扣也有文本框。我非常希望将这些 ui 元素数据绑定到此类中的字段,以便用户(和我)更轻松。
我的想法
有 2 个接口:IHasFees、IHasDiscounts 并让 Order 实现它们;两者都有一个 List 成员。这样,我就可以只访问 Sale 项目、只访问 Fees 和只访问 Discounts(如果需要,还可以将它们绑定到控件)。
我不喜欢它的地方: - 现在我有 3 种不同的类添加/删除方法(AddItem/AddFee/AddDiscount/Remove...) - 我正在复制(三重复制?)功能,因为它们都是相同类型项目的简单列表,只是每个列表具有不同的含义。
我在正确的道路上吗?我怀疑这对大多数人来说是一个已解决的问题(考虑到这种类型的软件很常见)。
【问题讨论】:
-
IHasFees 和 IHasDiscounts 听起来像 LOLCAT。