IConnection代表一个对设备的连接的抽象。具体有可能是Telnet, 或者HTTP之类。
TelnetConnection是基于Telnet协议的连接。
ResponseReceiverThread 是TelnetConnection被open()之后启动的接受connection output的线程。
IResponseListener抽象了对output输出进行监听的回调方法。
DslamTelnetProtocol实现了IResponseListener,希望这个类能够实时处理输出。
从类的名称到类提供的方法,都有不少问题。下面依次分析:
- TelnetConnection 的其中一个构造函数使用了用户名、密码。Login()功能应该从TelnetConnection中移走。
- 在TelnetConnection 中的connect()方法中编码实现了DslamTelnetProtocol到ResponseReceiverThread的注入、ResponseReceiverThread的启动。这样,依赖关系不明显。应当显式的把responseListener注入到connection。ResponseReceiverThread可直隐式的管理比较好。
- DslamTelnetProtocol是个名词。实际它完成对Dslam命令结果进行解析的工作。这个类应该分拆成两个类。并应该重命名。
DslamDeviceConstantData: DslamTelnetProtocol中定义的与DSLAM相关的常数应该分离到这个类中。而且若干参数是用户设定不变的、一些是连接到设备后从中读取的。
DslamCommandResultParser: 这个名称更能体现类的功能。
【是否给DslamCommandResultParser创建一个接口ICommandResultParser?目前还感觉不到有什么意义,因为目前还只是处理一个设备,所以也就不知道到底该抽象出哪些东西。其实上面的IConnection, TelnetConnection 也有同样的问题。】 - 还有一些方法实现的细节需要改正。比如, wdy建议读取到一个命令结果后就自动把输出缓存清空。是啊,我为什么要保留2M的输出缓存呢?目前其没有对结果缓存的需求,也使得结果处理复杂了。
没有评论:
发表评论