我的OOP设计正确吗?
本文关键字:OOP 我的 | 更新日期: 2023-09-27 18:04:24
我有一个场景,我正在为一家零售商设计一个系统。这不是一个真正的实时应用程序,而只是一个检查我的OO设计技能是否正确以及我的思考是否正确的场景。我还在这里学习。我在c#中做这个。
场景是这样的:
一个销售固定产品的零售商想要设计一个系统,该系统将从他的固定数量的供应商中选择最优价格并向该供应商下订单。为了简单起见,我把文具产品减少到同一家公司的一种产品,那就是XYZ笔。当被询问时,每个供应商都会提供XYZ笔的报价,零售商系统从各个卖家中选择最优价格,并向该卖家下订单。
方法1:
- 为供应商创建一个抽象类,并为每个供应商创建实现。
- 每个供应商都有一个PlaceOrder()方法和一个cost属性。
- DataLayer为每个供应商的实现设置cost属性。
- 创建一个CheckBestRetailer类,评估每个实现的最佳价格,并在适当的实现上下订单。
方法2:
- 创建一个带有Cost属性和PlaceOrder()方法的供应商类型列表。
- 对于每个供应商,数据层将新的供应商类型添加到列表中,并设置从数据库中获得的成本详细信息。
- CheckBestRetailer类循环遍历该列表并评估每个对象的最佳价格,并在适当的实现上下订单。
在以上两种方法中,我觉得方法1更接近面向对象,但前提是我有固定数量的供应商。如果供应商的数量可以根据从数据库中检索到的数据而改变,那么方法2更好。
你觉得怎么样?
我这里可能没有测试OOAD的最佳场景。我也希望有一些我可以使用的示例场景……如果可能的话,加上设计提示。
感谢您的宝贵时间。
如果您对每个供应商有不同的行为,则选项1将更合适,在这种情况下,似乎选择选项2是更好的选择,因为它更简单。
当我不知道如何解决问题时,我通常会这样做:
- 列出我的要求:为给定的供应商集的项目获得最佳价格。
- 创建一个候选对象列表:Supplier, Item, Retailers等
- 用我认为有意义的关系绘制或布局类
- 当我迷路时,我开始为需求编写主类,在这种情况下,它将是Retailers和GetBestRetailer()方法。
对于以上任何一种情况,无论你是否错了,这都是一种头脑风暴,可以更好地理解你必须实现的目标以及你找到的实现目标的选择。
每当你遇到一些似乎很困难的事情时,我通过创建一个返回你需要的答案的方法或创建一个新类(如果这似乎更有意义)来抽象它。作为一个练习,我试着去思考"困难/复杂"的部分将由其他人编码,通过委托给一个方法或类,我将其从我现在关注的问题部分分离出来。
hth
我认为方法2更好。没有必要为每个供应商创建一个唯一的类,因为供应商的行为几乎是相同的。