Вот использование этого дизайнаДолжен ли я показывать объект композиции?
Мне нужно опубликовать некоторые API, чтобы внешний мир мог настроить пользователя и его услуги. Конфигурирование пользователя в основном включает создание нового пользователя на основе входных параметров (например, id, password, level и т. Д.) И создание нового объекта подключения. После создания пользовательского объекта требуется настройка службы. Это двухэтапный процесс - включение службы, изменение деталей сервиса. Изменение сведений о сервисе состоит из набора действий. Эти действия относятся только к той службе. Эти действия будут отличаться для других служб.
Вот моя текущая реализация
Класс пользователя состоит из service_manager, связи, групповые занятия. класс service_manager управляет набором сервисов (скажем ServiceA, ServiceB ... ServiceN). Для каждого сервиса есть морской класс.
Пользовательский класс имеет публичную функцию assignService. Эта функция принимает аргумент, необходимый для идентификации класса службы. Он возвращает объект соответствующего класса обслуживания. Вот псевдо-код для того же самого.
serviceObjectA = user.assignService ('A');
Позже, этот объект сервиса может быть использован для выполнения действий, конкретных к этой службе.
serviceObjectA.performActionA1(...);
serviceObjectA.performActionA2(...);
serviceObjectA.performActionA10(...);
Вот вопрос, я столкнулся с этой реализацией:
а) функция performAction нуждается несколько атрибутов класса пользователя (например, идентификатор, пароль, место и т.д.) и объект подключения. Эти атрибуты пользователя необходимы для подготовки запроса. Объект соединения требуется для отправки этого запроса по уже созданному соединению. В настоящее время я управляю им в конструкторе класса обслуживания, в котором я передаю эти пользовательские атрибуты и объект соединения в качестве аргументов конструктора. Это становится немного неуправляемым, поскольку различные классы обслуживания требуют разных пользовательских атрибутов.
Пожалуйста, предложите альтернативу этому.
b) Действительно ли это хорошая практика разоблачения объекта обслуживания внешним миром?
Я все еще новичок в мире ООП, поэтому извиняюсь, если что-то неправильно понял. Мне будет очень здорово, если вы сможете продемонстрировать это с помощью псевдо-примера.
благодарит за ваш ответ. Что касается моего дизайна и его использования. Я хочу, чтобы эти службы были открыты для внешнего мира. но я немного сомневаюсь, должен ли я предоставлять эту функцию performAction через объект пользователя или объект службы. – rpg
Я обновил свой вопрос, описывающий использование этого дизайна. Пожалуйста, взгляните на эти слова. Пожалуйста, помогите мне обосновать, нужно ли мне подвергать эти сервисные объекты внешнему миру или нет? – rpg
Так звучит, что будут разные действия в зависимости от того, какая служба используется, и только одна услуга может использоваться пользователем? Моя первая мысль заключается в том, что, вероятно, не рекомендуется пытаться скрыть все как API через User, потому что часто многие из них не будут применяться, поскольку они специфичны для других служб, которые не могут использоваться этим пользователем? Или пользователь может использовать несколько сервисов, но каждый из них должен быть настроен первым, прежде чем их можно будет использовать? – Carl