Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System platnosci on-line - Jaki wzorzec?
Forum PHP.pl > Forum > PHP > Object-oriented programming
jarexx
Witam,
Jestem poczatkujacym w OOP i mam nastepujacy problem.
Mianowicie chce zapimlementowac w serwisie rozne systemy platnosci on-line (platnosci.pl, przelewy24.pl, Paypal, i jeszcze kilka innych zagranicznych.)
Chce sobie w panelu administracyjnym ustawiac, ktory system ma byc uzywany.
Wiem, ze musze wykorzystac jakis wzorzec projektowy (strategia?) i polimorfizm.
Wiem, ze wszystkie klasy obslugi roznych platnosci musza implementowac wspolny interfejs lub dziedziczyc po wspolnej klasie abstrakcyjnej.
Prosilbym was o jakis pseudo kod, jak rozwiazac ten problem, tak by w przyszlosci dodanie nowego systemu platnosci wiazalo sie z napisaniem jednej konkretnej klasy.
Mam problem z przelaniem mojej wizji dzialania na kod.
Nie wiem w ktorej klasie powinna byc podejmowana decyzja, ktory system platnosci ma byc uzywany etc. etc.
Prosze o pomoc.
markonix
Troszkę podobny problem bo przy smsach rozwiązałem intefejsem - metoda check_code i kilka pomocniczych takich jak numer => wartość i na odwrót.
Tworzony jest obiekt klasy zgodnej z aktualnymi ustawieniami i w sumie tyle.

Zmieniam w config i system zupełnie inny więc wydaje mi się to wystarczają elastyczne, a implementacja klasy payment_processor niweluje błędy.
jarexx
Witam ponownie.
Przelalem moj pomysl na pseudo kod.
Czy mozecie mi powiedziec, czy moje rozwiazanie ma tzw. "rece i nogi"?
Prosze o wszelkie uwagi i komentarze.

  1. interface IPayment
  2. {
  3. public function preparePayment();
  4. public function makePayment();
  5. } // end class
  6.  
  7. //przykladowe klasy konkretne implementujace interfejs
  8.  
  9. class P24 implements IPayment
  10. {
  11.  
  12. function preparePayment()
  13. {
  14. .....
  15. } // end func
  16.  
  17. function makePayment()
  18. {
  19. .....
  20. } // end func
  21.  
  22. } // end class
  23.  
  24. class PlatnosciPl implements IPayment
  25. {
  26.  
  27. function preparePayment()
  28. {
  29. .....
  30. } // end func
  31.  
  32. function makePayment()
  33. {
  34. .....
  35. } // end func
  36.  
  37. } // end class
  38.  
  39.  
  40. class PaymentFactory {
  41.  
  42.  
  43. public static function createObject($idPaySystem)
  44. {
  45. switch ($idPaySystem)
  46. {
  47. case 1:
  48. $obj = new P24;
  49. break;
  50.  
  51. case 2:
  52. $obj = new PlatnosciPl;
  53. break;
  54.  
  55. default:
  56. $obj = new P24;
  57. }
  58. return new Payment($obj);
  59.  
  60. } // end func
  61.  
  62. } // end class
  63.  
  64. //poprzez konstruktor wstrzykujemy konkretny obiekt wybranego systemu platnosci
  65. class Payment
  66. {
  67. protected $obj;
  68.  
  69. public function __construct(IPayment $obj)
  70. {
  71. $this->obj = $obj;
  72. } // end func
  73.  
  74. public function preparePayment()
  75. {
  76. $this->obj->preparePayment();
  77. } // end func
  78.  
  79.  
  80. public function makePayment()
  81. {
  82. $this->obj->makePayment();
  83. } // end func
  84.  
  85. } // end class
  86.  


Przyklad uzycia:

  1. $idPaySystem = 1; // id systemu platnosci pobiore z ustawien
  2. $payment = PaymentFactory::createObject($idPaySystem);
  3. $payment->preparePayment();
  4. $payment->makePayment();
d3ut3r
Trochę przekombinowałeś, moim zdaniem smile.gif

  1.  
  2. interface PaymentSystem{
  3.  
  4. public function preparePayment();
  5. public function makePayment();
  6.  
  7. }
  8.  
  9.  
  10. class platnosciPL implements PaymentSystem{
  11.  
  12. ....
  13.  
  14. }
  15.  
  16. class otherPaySystem implements PaymentSystem{
  17.  
  18. ....
  19.  
  20. }
  21.  
  22. class PaymentFactory{
  23.  
  24. public static function CreateObject($paySystem){
  25.  
  26. switch ((int)$paySystem){
  27.  
  28. case 1:
  29. return new platnosciPL();
  30. break;
  31.  
  32. case 2:
  33. default:
  34. return new otherPaySystem();
  35.  
  36. }
  37. }
  38. }
  39.  
  40. $payment=PaymentFactory::CreateObject(1);
  41. $payment->preparePayment();
  42. $payment->makePayment();
jarexx
Rzeczywiscie prostsze rozwiazanie. Dzieki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.