VB.NET,VS 2010,.NET 4VB.NET初学者设计的问题
你好,
我写的应用程序。我发现它充满了循环引用。我想重写部分代码来改进其设计。我已阅读了分层编程,并希望为我的应用程序实现类似的内容。
背景:我的应用程序是一个工业机器的控制程序。它解析包含各种连接设备的时间信息和设定值的配方(来自Excel文件)。有三种主要类型的设备:大多数通过Beckhoff终端连接,并通过TwinCAT(Beckhoff的伪PLC软件)进行通信,另外两个是RS-232设备,每个设备都有不同的通信协议。我可以通过Beckhoff提供的.NET API与Beckhoff设备进行通信。我已经为两个RS-232设备编写了解析器类。一些Beckhoff设备是输入,一些是输出;有些是数字的,有些是(伪)模拟的。
我认为我的问题是我在编写应用程序时试图绕过OOP,所以我创建了一些无法清晰了解其层次结构的类。在某些时候,我尝试做我认为正确的事情,例如,制作一个由“TwinCatDevice”类和“Rs232Device”类继承的“Device”类。但后来我把所有的通信代码都塞进了这些类中。
我现在正在尝试创建一些通信模块(例如,UtilTwinCat,UtilRs232),其中包含诸如“连接”,“断开”,“读取”,“写入”等抽象方法。然后我试图重写我的“设备”类和子类以使用这些模块,以便它们不必包含任何(有时是冗余的)通信代码。
这是我的问题:为每种通信类型创建单独的类是否会是一个好设计?即我应该说“TwinCatReadOnlyDigital”,“TwinCatReadOnlyAnalog”,“TwinCatWriteOnlyDigital”,“TwinCatWriteOnlyAnalog”,“TwinCatReadWriteDigital”,“TwinCatReadWriteAnalog”,“Rs232ReadOnlyDigital”等?或者也许有些接口像IReadOnly,IWriteOnly,IDuplex?
这看起来似乎不可能是正确的方法,因为我认为一个善于编程的人不会因为每一个可能的事件而结束十亿个不同的类。有什么方法可以在运行时有选择地在类上实现一个接口?我认为这是一个愚蠢的问题......我仍然试图围绕为什么会使用一个接口。我正在寻找一些关于如何解决这类设计问题的基本见解。具体来说,如果你有很多不同的“事物”,是否是创建大量不同的类的最佳方法?
非常感谢提前, 布赖恩
编辑:我只是想补充一点,要明确,有设备,其参数是已知的有限数量的,所以这将是简单的写所有的班级我需要的类型。我只是想知道是否有更好的方法。
感谢您的观点。我觉得我正在接近理解整个界面的想法。我有希望;三个月前,我对类的整个想法也同样感到困惑:x。我知道这个问题含糊不清,但我向你保证,这是我绝望的无知头脑的准确反映。我会到达那里! – 2011-01-21 01:50:49