我正在参与一个项目,这几乎是我第一次自己完成所有架构,而且我遇到了令人沮丧的情况。从启发式的角度来看,我的表单架构似乎是正确的,但我不认为它的实现是正确的。
我的架构是这样的:
基类:OrderForm
子类:PurchaseOrder
, Invoice
, Credit
PurchaseOrder
的子类:StockingOrder
从架构上来说,这对我来说是有意义的,因为所有子类都是 OrderForms(“是一个”),而库存订单“是一个”采购订单,只是一种特殊的类型。
问题
在编写我的 StockingOrder
时类,我注意到我必须 Shadow
大多数(如果不是全部)我想使用的方法来自 PurchaseOrder
因为它们在概念上做相同的事情,但需要稍微不同的实现功能。当然,这对我来说很臭,但我不知道如何解决它。我究竟做错了什么?或者这是正常的?(!)
谢谢...
最佳答案
听起来您可能需要在PurchaseOrder 中使用一些虚拟方法。也许像下面这样:
public abstract class OrderForm
{
//orderform members
}
public class PurchaseOrder: OrderForm
{
public void DoSomething()
{
//some logic that can be reused by child classes
DoSomethingElse();
}
protected virtual void DoSomethingElse()
{
//specialized logic
}
}
public class StockingOrder: PurchaseOrder
{
protected override void DoSomethingElse()
{
//specialized logic that makes StockingOrder different than PurchaseOrder
}
}
这应该有助于重用更多代码,因为您可以将在 PurchaseOrder DoSomethingMethod 中编写的类似逻辑分组,同时在虚拟 DoSomethingElse 方法中保留专用逻辑(PurchaseOrder 和 StockingOrder 之间不同)。
关于asp.net - 防止方法的大规模阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2377124/