Дизайн доступа участника (Доступ к члену участника) - PullRequest
0 голосов
/ 21 марта 2012

Мне интересно, есть ли у кого-нибудь дизайн, который может помочь мне редактировать вложенные объекты из интерфейса GUI.

Допустим, у меня есть два класса

class ObjectA
{
    public:
       ObjectA()
       ~ObjectA()

       unsigned GetParam();
       void SetParam(unsigned Param)

    private:
      unsigned Param;
};

class ObjectB
{
    public:
       ObjectB()
       ~ObjectB()

       ObjectA GetObjectA();
       void SetObjectA(ObjectA ObjA)

    private:
      ObjectA ObjA;
};

Теперь предположим, что у меня есть доступ к ObjectB, но мне действительно нужно установить Param из GUI. Есть два способа сделать это.

  1. Используйте аксессоры и мутаторы для редактирования объекта

    ObjectA ObjA = ObjB.GetObjectA();
    ObjA.SetParam(100);
    ObjB.SetObjectA(ObjA);
    
  2. Добавление публичного интерфейса в ObjectB

    void ObjectB::SetParam(unsigned Param)
    {
        ObjA.SetParam(Param);
    }
    

Мне действительно не нравятся эти решения, потому что они содержат много написания кода, которые обращаются к параметрам объекта и плохо масштабируются. Есть предложения?

1 Ответ

0 голосов
/ 21 марта 2012

Мое предложение состоит в том, чтобы сделать objA указателем, а не самим объектом, поскольку это облегчит избегать работы с конструктором копирования и, более того, если в ObjectA есть больше функций, вам может потребоваться иметь те же функции в классе ObjectB, например:: подобно SetParam вам может понадобиться реализовать GetParam ..

Функции являются ответственностью соответствующих классов, а не ответственностью класса контейнера.

class ObjectA
{
    public:
       ObjectA()
       ~ObjectA()

       unsigned GetParam();
       void SetParam(unsigned Param)

    private:
      unsigned Param;
};

class ObjectB
{
    public:
       ObjectB()
       ~ObjectB()

       ObjectA* GetObjectA();
       void SetObjectA(ObjectA *ObjA)

    private:
      ObjectA *ObjA;
};



ObjectA *ObjA = ObjB.GetObjectA();
ObjA->SetParam(100);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...