В Java есть ситуация, когда у меня есть внешнее устройство, с которым я хочу обмениваться данными через последовательный ввод / вывод. Я знаю, как это сделать, но сейчас я нахожусь в режиме рефакторинга, чтобы убедиться, что у меня есть поддерживаемый пакет программного обеспечения, и искал совета, что делать / не делать на высоком уровне (конкретные вопросы ниже)
Концептуально, скажем, у меня есть низкоуровневый интерфейс DeviceIOChannel
с несколькими методами (getInputStream, getOutputStream и некоторыми другими для управления обнаружением соединения / разъединения и т. Д.), Реализованными одним или несколькими классами, которые обрабатывают I / O для различных типов каналов передачи данных (RS232, TCPIP и т. Д.). Некоторая часть моего программного обеспечения, назовем его классом Device
, предназначена для управления вводом / выводом (синтаксический анализ ввода, построение вывода, управление низкоуровневыми конечными автоматами), но без знания деталей того, как DeviceIOChannel
делает это. вещь (так что я могу использовать его с RS232 или TCPIP без изменения класса Device
). Поэтому я, вероятно, передам DeviceIOChannel
как параметр конструктору Device
. Я также хотел бы представить какую-то модель данных внешнему миру.
- Правильно ли звучит мое разбиение
DeviceIOChannel
/ Device
?
Device
необходимо активно делать некоторые вещи в рабочем потоке. Какой лучший способ настроить это? Должен ли он создавать и управлять своими Thread
или ScheduledExecutorService
? Или я должен передать ScheduledExecutorService
в качестве параметра конструкции?
- любые мысли (ссылки на хорошие статьи в Интернете были бы идеальными!) О том, должен ли класс
Device
иметь метод startup()
, отличный от конструкции? (выполнение всей инициализации в сборке заставляет меня нервничать ... кажется, что создание экземпляра класса должно быть быстрым, а затем длинные вещи должны быть зарезервированы для фазы инициализации или запуска, которая наступит позже.)
- А как насчет того, чтобы иметь класс
Device
с парой методов выключения / перезапуска, в отличие от отсутствия выключения +, требующего создания нового экземпляра Device
?
- Я все еще новичок в архитектуре MVC: имеет ли смысл создавать
DeviceDataModel
интерфейс, который реализует Device
, или мне нужен какой-то отдельный класс DeviceDataModel
, который каким-то образом имеет двустороннюю связь с Device
класс?