Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jaki wzorzec projektowy użyć
darkin1
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 1.04.2016

Ostrzeżenie: (10%)
X----


Kolekcja w MongoDB
  1. {
  2. "_id": 1
  3. "name": "Acme",
  4. "createdAt" : ISODate("2016-01-30T15:40:59.153Z")
  5. "billing" : {
  6. "totalCost" : 100,
  7. "expire" : ISODate("2016-02-30T08:18:52.000Z"),
  8. },
  9. "settings": {
  10. "language" : "en",
  11. "logo" : '/ptah/to/logo.png',
  12. "color" : {
  13. "plugin" : "#496492",
  14. "button" : "#46A0D8"
  15. },
  16.  
  17. },
  18. "tags" : [
  19. "tag1",
  20. "tag2",
  21. "tag3"
  22. ],
  23. }


Zastanawiam się nad uzyciem któregoś z wzorców projektowych,
chciałbym aby wyglądało to mniej wiecej tak:

  1. class Company {
  2.  
  3. protected $company = null;
  4.  
  5. public function getCompany() {
  6. $this->company = Company::where('_id', 1)->first();
  7. }
  8.  
  9. }
  10. class Billing {
  11.  
  12. protected $company = null;
  13.  
  14. public function setBilling() {/*ustawia dane*/}
  15. }
  16. class Settings {
  17.  
  18. public function setSettings() {/*ustawia dane*/}
  19. }
  20. class Tags {
  21.  
  22. public function setTags() {/*ustawia dane*/}
  23. }
  24.  
  25. $companyModel = new Company();
  26. $companyModel->getCompany();
  27. $companyModel->setBilling([
  28. 'totalCost' => 500
  29. ]);
  30. $companyModel->setSettings([
  31. 'language' => 'pl',
  32. 'logo' => '/nowy/path/logo.png'
  33. ]);
  34. $companyModel->setTags([
  35. 'tags' => ['tag4', 'tag5', 'tag6']
  36. ]);
  37.  
  38. $companyModel->save();


Czyli mamy gówną klasę która pobiera całą kolekcje i teraz w "globalnym" atrybucie przetrzymujemy wszystkie dane,
a odwołując się do metod innych klas mogę zmienić dane poszczególnych subkolekcji i na końcu zapisać wszystkie zmiany

Myślałem nad wzorcem Obserwatora albo Fasady, ale żaden z nich do końca mi nie pasuje

  1. $settingsModel = new Settings();
  2. $settingsModel->setSettings([
  3. 'language' => 'en'
  4. ]);
  5. $settingsModel->save();


Chciałbym też aby poszczególne klasy mogły działać także osobno.
Jakieś pomysły jaki wzorzec projektowy wykorzystać do takiego zadania?

Ten post edytował darkin1 5.04.2016, 19:05:03
Go to the top of the page
+Quote Post

Posty w temacie


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: 22.08.2025 - 00:57