我正在开发一个计算组件配置的各种因素的项目。 配置由用户在运行时设置/更改。我有一个组件基类,所有的配置项都是从它派生的。DataInterface的体系结构设计 - 删除类型的开关
每个组件的信息都是在需要时从数据存储中检索的。 因此,存储介质可以改变我写了一个DataInterface类充当中介。
当前存储介质是Access数据库。 DataInterface类因此打开数据库并创建查询字符串以提取相关数据。查询字符串对于每个组件都是不同的。
我遇到的问题是设计如何在组件类和DataInterface类之间调用GetData。我的解决方案演变如下:
1)DataInterface为每个组件类型都有一个公共方法GetXXXXXData()。 (其中XXX是组件类型)。
Sensor sensor = new Sensor();
sensor.Data = DataInterface.GetSensorData();
2)DataInterface有一个公共方法GetData(componentType)并在组件类型中进行切换。
Sensor sensor = new Sensor();
sensor.Data = DataInterface.GetData(ComponentType.Sensor);
3)抽象组件基类有虚方法GetData(),它由每个派生类过滤。 GetData()使用DataInterface类来提取数据。
Sensor sensor = new Sensor();
sensor.GetData();
//populates Data field internally. Could be called in constructor
对于我来说,解决方案3似乎是最有效的做事方式。但是我仍然有这个问题,DataInterface仍然需要打开调用者的类型来决定使用哪个查询字符串。
我可以将这些信息放入每个组件对象中,但是这会将组件耦合到所选择的存储介质。不好。另外,组件不应该关心数据的存储方式。它应该调用它的GetData方法并返回数据。
希望这是有道理的。我正在寻找的是一种实现上述功能的方式,不依赖于使用开关类型。
我还在学习如何设计建筑,所以任何关于改进的意见都欢迎。
TIA
所以,如果我已经正确理解你的答案;如果我添加一个新组件,比如Resistor,那么我还需要添加一个名为ResistorDataReader的类? – Kildareflare 2009-07-29 10:05:51