我没有 OO 设计的实践经验,因此我对我为以下问题采用的解决方案犹豫不决:
我必须处理来自 N 个不同来源、不同格式的网络文本文件——处理包括经典读取、计算和插入数据库。
我设计的解决方案是创建一个类,该类定义与核心/文件格式无关的所有功能/行为,并根据给定的文件类型从后者创建派生类,其中每个类都包含适当的格式读取逻辑类句柄。
所有文件都通过 File.ReadAllLines() 读取,不同之处在于将文件中的字段映射到主对象的变量中。所以我通过在基类中定义一个事件来做到这一点,该事件在 File.ReadAllLines() 之后调用,并且所有派生类都将它们的映射逻辑附加到继承的事件。
但我知道这个解决方案在设计上是不正确的。首先,实例化基类没有任何意义,所以应该是抽象的。之所以不抽象,是因为所有派生对象的构造代码都是一样的,所以我把它定义为基础构造函数。我应该在抽象类中声明一个“初始化”方法并在每个派生类的构造函数中简单地调用它吗?(看起来很奇怪......)也许是接口?我看不出使用接口会给我带来什么好处,除了它不会解决这个“构造函数”问题......
什么是正确的解决方案?
我的场景的代码演示:
public delegate void myDelegate(object parameter);
class Base
{
#region Attributes
...
#endregion
public Base(object p)
{
//initialization code
...
}
#region Methods
protected void m1() { }
protected void m2() { }
...
#endregion
public event myDelegate myEvent;
}
class Child1
{
public Child1(object o) : base(o)
{
this.myEvent += new myDelegate(ChildMethod);
}
public void ChildMethod(object o)
{
...
}
}