Próbuję stworzyć bota dla komunikatora Telegram, próbując poznać OOP. Naprawdę zagubiłem się, jak podejść do problemu. Mam jednostkę wiadomości, ze wszystkimi pobierającymi i ustawiającymi, to myślę, że jest to dość proste. Mój problem jest, że chcę, aby utworzyć dwie (lub więcej) rodzajów fabrykNiepewność implementacji wzorów fabrycznych
1)proste przesłanie gdzie po prostu karmić fabrykę z chat_id chcesz wysłać wiadomość i tekst, które mogłyby być coś takiego:
<?php
namespace Telegram\Domain\Factory;
use Telegram\Domain\Entity\Message;
class MessageRaw extends MessageAbstract {
public function createMessage($chat_id, $text) {
$message = new Message();
$message->setChatId($chat_id);
$message->setText($text);
return $message;
}
}
gdzie MessageAbstract jest
<?php
namespace Telegram\Domain\Factory;
abstract class MessageAbstract {
abstract public function createMessage($chat_id, $text);
}
2)wiadomość z klawiaturą (Telegram umożliwia dołączenie niestandardowej klawiatury podczas wysyłania wiadomości). Mam tutaj problem, klawiatura jest podana jako tablica, więc byłby to jeszcze jeden argument do createMessage.
Więc moim problemem jest, czy zawsze powinienem podać argument klawiaturowy $, czy jest to prosta wiadomość, czy komunikat z klawiaturą? Czy te dwa rodzaje wiadomości są na tyle różne, że powinny być tworzone z różnych klas (chyba nie)? A może nie powinienem tego robić w fabryce, ale z setterami i getterami?
TLDR: Jak utworzyć obiekt z różną liczbą argumentów w fantazyjny sposób, coś w tym
$MessageRaw = new MessageRaw($chat_id, $text);
$MessageNumericKeyboard = new MessageNumericKeyboard($chat_id, $text); //numeric keyboard is standard so can be set in the createMessage Function
$MessageCustomKeyboard = new MessageCustomKeyboard($chat_id, $text, ['A', 'B']); //should it be done like this?
Nie widzę tutaj zastosowania dla '' MessageRaw'', dlaczego nie użyjesz bezpośrednio '' Message''? W każdym razie, jeśli nalegasz na używanie tego, spróbuj zawsze wysłać cały obiekt, co oznacza, że wysyłasz '' nową wiadomość() '' zamiast $ chat_id, $ text (najpierw pozwoliłoby to na wpisanie zmiennej, a drugie to daje dostęp do wszystkich dostępnych metod na tym obiekcie). – ahmad
@ahmad Przepraszam, nie podążam za tobą. Po prostu ustawiam obiekt, nic nie wysyłam (jeszcze). Później wyślę to, ale chcę ustawić klawiaturę (jeśli to konieczne) w miły sposób i nie wiem, czy to musi być zrobione podczas tworzenia obiektu. – godsaway
Ahmad odnosi się do Dependency Injection: http: // code .tutsplus.com/tutoriale/dependency-injection-in-php - net-28146 – CD001