Я изучаю принципы OO SOLID и образцы дизайна, и я хочу немного поработать над этим. Поэтому я получаю одну проблему из моего текущего проекта и пытаюсь ее разработать. Проверьте, правильно ли она выполнена или она слишком переработана или я плохо ее реализую. Ваш ответ наиболее важен.Правильно ли это OOD?
Задача Мне нужно управлять кампаниями смс и электронной почтой в одной системе. Я хотел сказать, храня его в базе данных и извлекая его и т. Д.
Итак, я думаю, что будет какая-то особенность для кампании, такой как дата создания даты и т. Д. Таким образом, я создал класс с именем campaignmodel, который отвечает за некоторые общие функции, связанные с агитировать
Class CampaignModel
{
public function save($data)
{
// add campaign specific data
// save the campaign.
}
public function get()
{
// select the row from database and return it.
}
}
я сделать smscampaign и электронной почты кампании
class SMSCampaignModel extends CampaignModel
{
public function save($data)
{
// add sms specific data and
parent::save($data);
}
public function gets()
{
//fire the query to get the sms campaigns and returns it.
}
}
class EmailCampaignModel extends CampaignModel
{
public function save($data)
{
// add email specific data
parent::save($data);
}
public function gets()
{
//fire the query to get the email campaigns and returns it.
}
}
Теперь каждая кампания будет иметь получателей, и мы должны сохранить статус каждого получателя, как он открывает почту или почту/смс отправленное или сбой и т.д. . Я думаю, что мы будем посылать кампании с большим количеством писем или цифрами, поэтому я решил создать другую таблицу базы данных для хранения таких деталей, таких как sms_campaign_log, email_campaign_log и т.д. Я создал интерфейс для него
interface CampaignLogs
{
function insert_log();
function get_details();
}
class SmsCampaignLogs implements CampaignLogs
{
public function insert_log($data)
{
// get the number and status save it into the sms logs table.
}
public function get_details($campagin_id)
{
// get the logs from campagin table and return it.
}
}
class EmailCampaignLogs implements CampaignLogs
{
public function insert_log($data)
{
// get the number and status save it into the email logs table.
}
public function get_details($campagin_id)
{
// get the logs from campagin table and return it.
}
}
и, наконец, я думаю, теперь я должен использовать шаблон стратегии для его реализации (я не знаю, правильно это или нет).
class Campaign
{
private $log;
private $campaign_type;
public function __construct($campaign, $logger)
{
$this->campaign_type = $campaign;
$this->log = $logger;
}
public function save($data)
{
$this->campagin_type->save();
}
public function gets()
{
$this->campaign_type->gets();
}
public function log($data)
{
$this->log->insert_log($data);
}
public function get_campaign_details($campaign_id)
{
$this->log->get_details($campaign_id);
}
}
сейчас код реализации.
$campaign = new SmCampaignModel();
$logger = new SmsCampaignLogs();
$c = new Campaign($campagin,$logger);
$c->save($data);
$c->get($campaign_id);
$c->get_campaing_details();
Тогда я думаю, что если требуется шаблон стратегии. Просто, я могу реализовать:
$campaign = new SmCampaignModel();
$logger = new SmsCampaignLogs();
$campaign->save($data);
$campaign->get($campaign_id);
$logger->get_campaing_details($campaign_id);
Так теперь я полностью запутался. Я хочу, чтобы ваше мнение о том, правильно ли я применил принципы SOLID в моем дизайне (и шаблон стратегии необходим/правильно использован) или нет.
то мы можем передать этот вопрос на этот сайт, или я хочу переписать этот вопрос там @deceze – Siddhesh
Этот вопрос выглядит как очень урезанная версия «голых костей» фактического кода. Таким образом, это «псевдо» - или гипотетический код и ** вне темы ** для codereview.se – Vogel612
@ Сидшедшая миграция возможна, но требует вмешательства модератора и необходима, только если были предоставлены полезные ответы/комментарии. Вы могли бы ускорить процесс и опубликовать его там сами, а затем удалить его. –