【发布时间】:2011-02-08 17:49:34
【问题描述】:
我想知道是否应该更改我的一个项目的软件架构。
我正在为双方(实际上是主机和设备)使用共享代码的项目开发软件。这很有帮助,因为共享数据,例如枚举可以存储在一个中心位置。
我正在使用我们所谓的“通道”在设备和主机之间传输数据。每个通道都必须在设备和主机端实现。我们有不同种类的通道,普通通道和特殊通道传输测量数据。
我当前的解决方案在抽象基类中有共享代码。从那里开始,代码在两侧之间拆分。事实证明,在某些情况下我们可以共享代码但我们不能共享它,我们必须在每一方都实现它。
DRY 原则(不要重复自己)说你不应该有两次代码。
我现在的想法是连接例如的功能。设备端和主机端的抽象测量通道在一个具有共享代码的抽象类中。这意味着,一旦我们为该通道的设备端或主机端创建了一个实际类,我们就必须隐藏另一端使用的功能。
这是可以接受的做法吗:
public abstract class ChannelAbstract
{
protected void ChannelAbstractMethodUsedByDeviceSide() { }
protected void ChannelAbstractMethodUsedByHostSide() { }
}
public abstract class MeasurementChannelAbstract : ChannelAbstract
{
protected void MeasurementChannelAbstractMethodUsedByDeviceSide() { }
protected void MeasurementChannelAbstractMethodUsedByHostSide() { }
}
public class DeviceMeasurementChannel : MeasurementChannelAbstract
{
public new void MeasurementChannelAbstractMethodUsedByDeviceSide()
{
base.MeasurementChannelAbstractMethodUsedByDeviceSide();
}
public new void ChannelAbstractMethodUsedByDeviceSide()
{
base.ChannelAbstractMethodUsedByDeviceSide();
}
}
public class HostMeasurementChannel : MeasurementChannelAbstract
{
public new void MeasurementChannelAbstractMethodUsedByHostSide()
{
base.MeasurementChannelAbstractMethodUsedByHostSide();
}
public new void ChannelAbstractMethodUsedByHostSide()
{
base.ChannelAbstractMethodUsedByHostSide();
}
}
现在,DeviceMeasurementChannel 仅使用来自MeasurementChannelAbstract 的设备端功能。通过声明 MeasurementChannelAbstract protected 的所有方法/成员,您必须使用 new 关键字才能从外部访问该功能。
这是可以接受的,还是在以后使用代码时可能会出现任何陷阱、警告等?
【问题讨论】:
-
您在几个地方说过他们共享代码,然后在其他几个地方您必须单独实现一些东西?它们之间究竟共享了什么,从而阻止您将它们分开?
-
@Jon Cage:目前(在将 sw 架构更改为上面的示例之前)我有 DeviceMeasurementChannelAbstract 和 HostMeasurementChannelAbstract。一个用于设备端,一个用于主机端。这两个通道分别继承自 DeviceChannelAbstract 和 HostChannelAbstract。这两个继承自一个名为 ChannelAbstract 的共享抽象类。现在我有两个变量,所有测量通道都需要,但普通通道不需要。那就是问题所在。希望这能澄清它而不是让你感到困惑:S
标签: c# oop architecture