Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> System platnosci on-line - Jaki wzorzec?
jarexx
post
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.07.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
markonix
post
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
jarexx
post
Post #3





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.07.2009

Ostrzeżenie: (0%)
-----


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();
Go to the top of the page
+Quote Post
d3ut3r
post
Post #4





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


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();


Ten post edytował d3ut3r 5.08.2012, 05:56:44


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
jarexx
post
Post #5





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.07.2009

Ostrzeżenie: (0%)
-----


Rzeczywiscie prostsze rozwiazanie. Dzieki smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 07:29