Я хочу использовать Amazon SNS для отправки текстовых сообщений в моем приложении. Меня беспокоит только одно: что произойдет, если я решу поменять Amazon SNS на другого провайдера?
Я пришел к следующему решению, но не уверен, является ли это наилучшей практикой или имеет ли это какие-либо последствия в будущем.
<?php
interface SMS {
public function sendSMS($from, $to);
}
abstract class AmazonSNS {
public function sendSMS($from, $to) {
echo 'Message sent';
}
}
class Notification extends AmazonSNS implements SMS {
}
$notification = new Notification;
$notification->sendSMS('xxxx', 'xxxx');
Мой мыслительный процесс состоял в том, что мое приложение будет заботиться только о класс уведомлений и этот класс заставит все абстрактный класс (поставщик услуг) Я использую для реализации методов, требуемых интерфейсы (Я мог бы также использовать интерфейс электронной почты). Использование абстрактного класса также препятствует его непосредственному созданию, что было бы нежелательным поведением.
Для меня лучше использовать
<?php
interface Notification {
public function notify($from, $to);
}
class AmazonSNSSmsNotification implements Notification {
public function notify($from, $to) {
//send notification using SMS
}
}
class OtherProviderSmsNotification implements Notification {
public function notify($from, $to) {
//send notification using SMS from other provider
}
}
class EmailNotification implements Notification {
public function notify($from, $to) {
//send notification using email
}
}
тогда вы можете легко поменять реализацию
function sendNotification(Notification $notifObj, $from, $to) {
$notifObj.notify($from, $to);
}
sendNotification(new AmazonSNSSmsNotification(), $from, $to);
sendNotification(new OtherProviderSmsNotification(), $from, $to);
Других решений пока нет …