首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java:重构案例(MVC的M和C?)

java:重构案例(MVC的M和C?)
EN

Stack Overflow用户
提问于 2010-01-28 18:12:09
回答 1查看 161关注 0票数 1

在Java中,我有一个外部设备,我想通过串行I/O进行通信,我知道如何做到这一点,但我现在处于重构模式,以确保我已经有了一个可维护的软件包,并且正在寻找关于在高级别上应该做什么或不做什么的建议(下面的具体问题)。

概念上,假设我有一个低级别的DeviceIOChannel接口,它有几种方法(getInputStream、getOutputStream和其他一些方法,用于控制连接/断开连接检测等),由一个或多个类实现,这些类处理各种数据链路类型(RS232、TCPIP等)的I/O。我的一些软件(让我们称之为Device类)致力于管理I/O (解析输入、构造输出、管理低级状态机),但不知道DeviceIOChannel是如何工作的(这样我就可以在RS232或TCPIP中使用它,而不必更改Device类)。因此,我可能会将DeviceIOChannel作为参数传递给Device的构造函数,我还想向外界公开某种数据模型。

  1. 完成了对DeviceIOChannel / Device声音的分区,
  2. 需要在工作线程上积极地做一些事情。设置这个的最好方法是什么?我应该让它创建和管理自己的ThreadScheduledExecutorService吗?或者我是否应该将ScheduledExecutorService作为一种构造性的ScheduledExecutorService思想传递(链接到网络上的好文章将是理想的!)关于Device类是否应该有与构造不同的startup()方法的问题?(在构造中做所有的初始化工作让我感到紧张.似乎类实例的构造应该是快速的,然后应该为稍后到来的init或启动阶段保留冗长的内容。)
  3. 如何考虑是否有一个具有一对关机/重新启动方法的Device类,而不是需要创建一个新的Device实例的关闭+呢? MVC体系结构中的
  4. :创建一个Device实现的DeviceDataModel接口是否有意义,还是应该有一个与Device类有双向通信的单独类DeviceDataModelH 230G 231
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-28 18:33:26

一个点回答你的问题。

是的,这听起来确实是reasonable.

  • Yes,为您的线程传递了一个抽象,这肯定会使类更易于测试。构造函数中的两个依赖项听起来不像unreasonable.

  • Having --启动方法增加了更多的开销(在方法调用时,您必须检查是否调用了启动,您不能假设它是启动的),但是,我同意构造函数上的这种网络活动在我看来总是很奇怪。我认为这确实是一个风格问题,但另一种方法的一个优点是,如果在启动之前需要调试或记录状态,则设备类可以将其配置表示为实例,而不是使其他东西无法获得对象的句柄。

  • --我认为这个问题的答案几乎完全取决于您如何处理#3。如果API启动于其构造函数中,则不会有重新启动的方法,如果它是通过一个方法启动的,那么

  • 将以该类的网络IO性质来运行。DeviceDataModel接口将使代码的其余部分更易于测试。但是,它不需要由设备类直接实现,而是作为内部类从设备类的方法中返回,这样就可以轻松地与设备类进行通信,但仍然可以在测试期间进行模拟或篡改。至少,只要序列化的requirement.

不是DeviceDataModel

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2156783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档