Простой дизайн для маршрутизации данных между несколькими объектами? - PullRequest
1 голос
/ 07 февраля 2012

В моем текущем проекте я использую несколько классов, каждый из которых представляет какое-то периферийное устройство.Каждый класс предоставляет оба метода для ввода, а также обратные вызовы для вывода.Некоторые выходные данные из одного класса должны использоваться в качестве входных данных для другого класса, поэтому простой дизайн - позволить клиенту реализовать все обратные вызовы и обрабатывать всю маршрутизацию между объектами.

Это можно проиллюстрировать на следующем упрощенном примере.В моем приложении число классов, а также входов и выходов выше.

interface CentralLockControlCb
{
  void onCentralLockStateChanged(bool on);
}

class CentralLockControl
{
  void setDoorLockedIndicator(bool locked);
}

interface DoorControlCb
{
  void onDoorLockedStateChanged(bool locked);
}

class DoorControl
{
  void setCentralLockState(bool on);
}

class Main : public CentralLockControlCb, DoorControlCb
{
  private CentralLockControl centrallock;
  private DoorControl door;

  public static void main(String[] args)
  {
    clc = new CentralLockControl(this);
    dc = new DoorControl(this);
  }

  void onCentralLockStateChanged(bool on)
  {
    door.setCentralLockState(on);
  }

  void onDoorLockedStateChanged(bool locked)
  {
    centrallock.setDoorLockedIndicator(locked);
  }  
}

Приведенное выше решение не требует, чтобы классы знали друг о друге, но, с другой стороны, теперь они кажутся очень связанными сОсновной класс.

В качестве альтернативы я рассмотрел вопрос о том, чтобы позволить каждому классу допускать нескольких наблюдателей и позволять классам наблюдать друг за другом.В качестве другой альтернативы я рассмотрел что-то похожее на шаблон издателя / подписчика, но похоже

Какой дизайн вы бы порекомендовали для такой проблемы?

1 Ответ

0 голосов
/ 22 февраля 2012

Звучит так, будто вы хотите Event Aggregator , который вы можете использовать вместо Main, используемого в этом качестве. Пройдя по этому пути, вы сможете зарегистрировать свои устройства для прослушивания определенных событий о других устройствах очень хорошим способом. Более того, этот дизайн, скорее всего, приведет вас к обобщению ваших событий, чтобы они содержали полезное состояние, чтобы ваши устройства могли игнорировать определенные события при необходимости. Это сделает ваш агрегатор событий менее сложным (не будет никаких решений относительно того, кому нужно вызывать, когда происходит событие). Наконец, вы сможете уведомлять заинтересованные стороны асинхронно, что может или может быть важным в вашем случае.

...