我正在尝试使用OOP,但有时我无法理解它。特别是,在编写类的方法的领域。我正在创建一个动物收容所管理计划,跟踪它拥有的所有动物和产品。我目前正致力于将功能应用于产品部分。
为了清楚起见:在主窗体中,我有一个网上商店的实例,其中我保留了网店中的产品列表,我有一个用户列表,其中还有一个属于每个用户的产品列表。
当我考虑类图时,我认为用户有这样的方法:sellProduct,buyProduct等。这些方法的实现则是:从用户列表中删除产品并将它们添加到产品列表中网店(sellProduct)和buyProduct相反。
在我的解决方案中,我已经创建了一个webshop类的静态实例,因此我的主窗体中的所有其他类都可以访问它:
static Webshop webshop = new Webshop();
用户类实现了以下方法:
public void SellProduct(Product product)
{
products.Remove(product);
AnimalForm.Webshop.Products.Add(product);
}
public void BuyProduct(Product product)
{
AnimalForm.Webshop.Products.Add(product);
products.Add(product);
}
只需从用户类的产品列表中删除产品,然后将其添加到网上商店的产品列表中。
但后来我想我不能把这两条规则放在点击按钮的事件处理程序中吗?如果我在主窗体中执行此操作,我只能创建一个Webshop实例,而不是将其设置为静态以使其可供其他类访问。但是,我在课堂上唯一能做的就是保持产品清单没有任何功能。
在上面的解决方案中,我在用户类中使用了这些方法,但不是让它们在这里,我也可以在webshop类中使用它们。
这种问题是我大部分时间都在努力解决的问题。将方法放在正确的位置。你们怎么看待这些选择?
答案 0 :(得分:0)
我建议添加一个负责购买和销售产品的服务类,并将WebShop和User留作简单的数据对象。您可以拥有一个负责买卖产品的TransactionService类。该服务类可以具有Buy(网上商店,产品,用户用户)方法和类似的Sell方法。通过这种方式,TransactionService类将负责确保所有相关的事情发生(并且如果必要的话可能会回滚所有内容)并且可以对库存等进行检查。