C# 创建具有不同属性的对象
我正在为零售店创建一个pos系统,作为一种实践,我一直在想什么是订购商品的最佳方式 每个项目都有几个属性:名称、价格a、价格B、价格C 我正在考虑创建一个类似以下代码的对象,它应该可以正常工作。价格A、B和C之间的差异是,价格A将是客户去商店购买商品时的价格;价格B将交付至A类地点,价格C将交付至B类地点 所以,我的问题是,除了价格A、B和C之外,每个客户都有自己的价格,在这种情况下,我应该如何订购我的物品 例如:C# 创建具有不同属性的对象,c#,C#,我正在为零售店创建一个pos系统,作为一种实践,我一直在想什么是订购商品的最佳方式 每个项目都有几个属性:名称、价格a、价格B、价格C 我正在考虑创建一个类似以下代码的对象,它应该可以正常工作。价格A、B和C之间的差异是,价格A将是客户去商店购买商品时的价格;价格B将交付至A类地点,价格C将交付至B类地点 所以,我的问题是,除了价格A、B和C之外,每个客户都有自己的价格,在这种情况下,我应该如何订购我的物品 例如: Customer A : price A = 1.1, price B = 2.
Customer A : price A = 1.1, price B = 2.5, price C = 4.1
Customer B : price A = 1.2, price B = 3.6, price C = 4
听起来您需要一个
类PricingPolicy
,从中可以创建两个实例(例如,为每个客户创建一个单独的PricingPolicy
实例,或者为一组客户创建一个共享的PricingPolicy
实例)
然后,可以使用适用的
PricingPolicy
实例将项目
(在我看来,它应该只存储“基本”价格)转换为每个客户或客户组的实际价格。听起来您需要一个类PricingPolicy
,从中创建两个实例(例如,每个客户的单独PricingPolicy
实例,或者一组客户的共享PricingPolicy
实例)
然后,可以使用适用的
PricingPolicy
实例将项目
(在我看来,该项目只应存储“基本”价格)转换为每个客户或客户群的实际价格。您可能希望使用以下方法:
public class Customer
{
public double PriceA;
public double PriceB;
public double PriceC;
}
public class Item
{
public string Name;
public PriceA;
public PriceB;
public PriceC;
}
在该程序中,您可以创建CustomerA和B,以及它们各自的定价
并使用创建一个新项目
Item createItemForCustomer(Customer customer)
{
double factorA = 1.01;
double factorB = 1.2;
double factorC = 1.6;
Item newItem = new Item();
newItem.Name = "brick",
newItem.PriceA = customer.PriceA * factorA,
newItem.PriceB = customer.PriceB * factorB,
newItem.PriceC = customer.PriceC * factorC,
return newItem;
}
根据以上信息,这是我能想到的最简单的解决方案。但是,我认为您所针对的整个解决方案很可能需要重新思考,并按照其他人的建议进行更多的设计。您可能希望采用以下解决方案:
public class Customer
{
public double PriceA;
public double PriceB;
public double PriceC;
}
public class Item
{
public string Name;
public PriceA;
public PriceB;
public PriceC;
}
在该程序中,您可以创建CustomerA和B,以及它们各自的定价
并使用创建一个新项目
Item createItemForCustomer(Customer customer)
{
double factorA = 1.01;
double factorB = 1.2;
double factorC = 1.6;
Item newItem = new Item();
newItem.Name = "brick",
newItem.PriceA = customer.PriceA * factorA,
newItem.PriceB = customer.PriceB * factorB,
newItem.PriceC = customer.PriceC * factorC,
return newItem;
}
根据以上信息,这是我能想到的最简单的解决方案。但是,我认为您所针对的整个解决方案很可能需要一些反思和其他人已经提出的更多设计。正如Peter所说
听起来你需要一个班级收费政策
创建一个新类:
class PricingPolicy {
public decimal Price;
public string Title;
}
并将其用作列表
请阅读我提出的关于代码审查的以下问题:
正如彼得所说
听起来你需要一个班级收费政策
创建一个新类:
class PricingPolicy {
public decimal Price;
public string Title;
}
并将其用作列表
请阅读我提出的关于代码审查的以下问题:
项目
应该有一个名为PriceForCustomer
的方法。传入客户或客户id,它会返回一个价格。好的,你应该做的第一件事是使用更有意义的名称。除此之外,你需要更好地理解和定义你的业务领域。这些价格差异是静态的,并作为数据管理的吗?还是静态的它们是任何给定“尺寸”的计算结果对于数据,这听起来像是一个对象的不同实例或不同相关对象之间的交互,而不仅仅是一个大对象上属性数量的几何增长。Item
应该有一个名为PriceForCustomer
的方法。传入一个客户或客户id,它会返回一个价格。首先你应该做的是使用更有意义的名称。除此之外,你还需要更好地理解和定义你的业务领域。对于任何给定的“维度”,这些价差是静态的并作为数据管理的?还是计算的结果对于数据,这听起来像是对象的不同实例或不同相关对象之间的交互,而不仅仅是一个大对象上属性数量的几何增长,PriceA=customer.PriceA,PriceB=customer.PriceB,PriceC=customer.});是的。不过,我不想改变benji的风格。目前,了解实现细节似乎比惯用代码更重要;)实例化项newItem=newItem的另一种方法({Name=“Brick”,PriceA=customer.PriceA,PriceB=customer.PriceB,PriceC=customer.});是的。不过,我不想改变benji的风格。目前了解实现细节似乎比惯用代码更重要;)