Witam,

piszę bibliotekę do obsługi użytkownika w serwisie. na razie wygląda to tak jak przedstawione jest to poniżej. Jednak oprócz standardowych metod typu logowanie rejestracji itp, w klasie można znaleźć również metody obsługujące tzw.. tracking (czyli zliczanie ilości nie udanych prócool.gif pytanie czy jest sens tworzenie np. abstrakcyjnej klasy Member_Tracker gdzie ta funkcjonalność będzie zawarta i będzie dziedziczona przez klasę Member, czemu abstrakcyjna bo ogólnie nie chce by była możliwość wywołania samej klasy w kodzie. Problem, który mnie trapi to konieczność pobrania instancji CODEIGNITERA w klasie Member_Tracker do obsługi modelu (nie udane próby są zapisywane w bazie danych i też stamtąd pobierane) jak i configa. Zależy mi przedewszystkim na przejrzystości kodu oraz nie dublowania nie potrzebnych rzeczy.

Oczywiście można to wrzucić to wszystko do jednej klasy ale czy nie lepiej to rozdzielić tak jak to przedstawiłem questionmark.gif?

  1. abstract class Member_Tracker
  2. {
  3. public function __construct()
  4. {
  5. $this->CI = & get_instance();
  6. }
  7.  
  8. protected function tracker($login = "")
  9. {
  10. // init default values
  11. // load model
  12. // load config
  13. }
  14.  
  15. protected function time_left()
  16. {
  17. // time left for user
  18. }
  19.  
  20. protected function blocked()
  21. {
  22. // check if user has reach limit
  23. }
  24.  
  25. protected function increment_failures($key, $id, $ip)
  26. {
  27. // +1
  28. }
  29.  
  30. protected function send_failure_notify($login, $ip, $failures)
  31. {
  32. // send email to user about failures
  33. }
  34. }
  35.  
  36. interface Member_Base
  37. {
  38. // public function get_current_user();
  39. // public function register(array $user_info);
  40. public function login($identification, $password = FALSE, $remember = FALSE);
  41. public function logout($redirect = FALSE);
  42. public function restrict(array $rules = array(), $return = FALSE, $return_error = FALSE);
  43. public function get_error();
  44. }
  45.  
  46. class Member extends Member_Tracker implements Member_Base
  47. {
  48.  
  49. }