У меня есть веб-интерфейс, с которого я буду собирать пользовательские данные (имя пользователя, пароль, электронная почта и т. Д.), И бэкэнд должен предоставлять эти данные в 3 другие системы (SystemA, SystemB, SystemC).
Предоставление выполняется 3 различными API, по одному для каждой системы (A, B и C).
Мой текущий дизайн в бэкэнде выглядит примерно так:
<code>
interface ProvisionData
{
public function createUser();
public function deleteUser();
public function changePassword();<br>
}
<code>
class SystemA_API_wrapper implements ProvisionData
{
public function createUser(){ ... }
public function deleteUser(){ ... }
public function changePassword(){ ... }
}</p>
<p>class SystemB_API_wrapper implements ProvisionData
{
public function createUser(){ ... }
public function deleteUser(){ ... }
public function changePassword(){ ... }
}</p>
<p>class SystemC_API_wrapper implements ProvisionData
{
public function createUser(){ ... }
public function deleteUser(){ ... }
public function changePassword(){ ... }
}
Каждый из System * _API_wrapper имеет различную реализацию функций createUser () (и остальных).
Во внешнем интерфейсе я создал своего рода прокси-класс, который я передаю с помощью данных, собранных из веб-интерфейса. Это выглядит так:
class provisionProxy
{
public $sA = null;
public $sB = null;
public $sC = null;</p>
<pre><code>//constructor instantiates all System*_API_wrapper objects
public function __construct() {
$sA = new SystemA_API_wrapper();
$sB = new SystemB_API_wrapper();
$sC = new SystemC_API_wrapper();
}
// proxy function deleteUser calls deleteUser() of each of
// our APIs
public function deleteUser($username, $password) {
$this->sA->deleteUser($username, $password);
$this->sB->deleteUser($username, $password);
$this->sC->deleteUser($username, $password);
}
}
У кого-нибудь есть какие-либо предложения или лучшая практика?
(Я уже отправил тот же вопрос, но из-за технических проблем не могу войти в свою старую учетную запись, поэтому вопрос отредактирован и снова опубликован под моей новой учетной записью. Исходный вопрос можно найти здесь: Вопрос о дизайне: Какая практика лучше? - спасибо)