asp.net - 防止方法的大规模阴影

标签 asp.net vb.net inheritance architecture

我正在参与一个项目,这几乎是我第一次自己完成所有架构,而且我遇到了令人沮丧的情况。从启发式的角度来看,我的表单架构似乎是正确的,但我不认为它的实现是正确的。

我的架构是这样的:

基类: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/

相关文章:

c# - 在 javascript 中验证 ASP.NET 树节点

JPA 注释将包含来自非实体父类(super class)的字段(来自 JAR!)

javascript - 如何使 javascript 类派生自 jquery 对象?

asp.net - 通过 .ashx 从数据库返回调整大小的图像

.net - 有没有办法从 TableLayoutPanel 的一行中删除所有控件?

C++ 多态性——调用具有不同签名的派生类方法

asp.net - ASP.Net MVC 中的 HTTP 模块和 HTTP 处理程序?

c# - In-Memory HttpServer 如何知道要托管哪个 WebAPI 项目?

c# - 您如何为开发/阶段/生产维护单独的 Web 服务

vb.net - 添加新数据后如何刷新我的 datagridview