Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przestrzenie nazw po raz ostatni..., ...mam nadzieję. Ich długość a długość nazw klas
starach
post
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Cześć,

Mam FW podobny w miarę strukturą katalogów do Kohany. Jakiś czas temu dodałem w nim przestrzenie nazw. Teraz naszła mnie taka refleksja czy zrobiłem to dobrze. A mianowicie czy nie przedobrzyłem z ich długością.
  1. namespace Enforcer\System\Libraries;
  2. use \Enforcer\System\Base\Application\Context;
  3.  
  4. abstract class Data implements Context\ImplanterInterface { }

Przykładowa przestrzeń nazw dla controllera pluginu:
  1. namespace \Starach\Enforcer\Plugins\Pages\Controllers;
  2.  
  3. class Pages extends \Enforcer\System\Libraries\Controller\ContextImplanter { }

Tak się zastanawiam czy nie lepiej byłoby skrócić przestrzeń nazw i przedłużyć nazwy klas.
Na przykład:
  1. namespace \Starach\Enforcer\Plugins\Pages;
  2.  
  3. class ControllersPages {}
  4. class ControllersPageEdit {}
  5. class ControllersPageView {}
  6. class LibrariesPages {}
  7. // edit->
  8. // obecnie
  9. namespace Enforcer\System\Libraries\Client\Language;
  10. class Collection implements \Iterator { }
  11. // zmiana na
  12. namespace Enforcer\System;
  13. class LibrariesClientLanguageCollection implements \Iterator { }
  14. // lub
  15. namespace Enforcer\System\Libraries;
  16. class ClientLanguageCollection implements \Iterator { }
  17. // <-edit
  18. // I tak dalej.


Co o tym myślicie?

Ten post edytował starach 14.09.2010, 18:56:10
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
smentek
post
Post #2





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

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


Zwracasz się do ludzie w stylu: "Wojtku synu Piotra z miasta Wrocław w kraju Polska na planecie Ziemia" czy po prostu "Wojtku" ? biggrin.gif

Ten post edytował smentek 14.09.2010, 19:58:47


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@smentek: Co to ma mieć niby do rzeczy?

Co do tematu... jakieś strasznie dziwne masz te nazwy - chociaż ciężko jest to obiektywnie ocenić, bo nie ani za co połowa tego kodu odpowiada, ani jak wygląda całość. Jednak:

1. To "Enforcer" to nazwa Twojego FW? Jeśli tak to dobrze, że jest to pierwszy element nazwy. Jeżeli nie, to zawsze dodawaj sobie nazwę projektu jako początek nazwy.
2. Jakieś człony typu "System" czy "Libraries" wydają mi się niepotrzebne - ale jak już napisałem: nie znam reszty kodu więc nie mogę tego jednoznacznie określić. Być może ich użycie jest w Twoim przypadku jak najbardziej poprawne
3. Każdy plugin jednak dobrze by było jakby miał osobną przestrzeń na swoje kontrolery, swoje widoki swoje coś tam i jeszcze coś innego
Go to the top of the page
+Quote Post
starach
post
Post #4





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


@smentek: Co prawda nie ma to tutaj zastosowania, ale analogia jest jak najbardziej trafna. biggrin.gif

@Crozin: Całość jest strukturą bardzo bardzo podobną do Kohany.

Kod
- applications
| - cli
| - blog
| - etc.
- plugins
| - Starach
  | - Pages
    | - controllers
    | - libraries
    | - models
    | - views
- system
| - base
  | - Router
  | - Plugins
  | - Loader
  | - bootstrap.php
| - controllers
| - etc.

etc.

Zastanawiam się czy nie przedobrzyłem przy podziale na przestrzenie nazw. Na dobrą sprawę zastanawia mnie teraz tylko poniższa sprawa.
  1. namespace Enforcer\System\Libraries\Client\Language;
  2. class Collection implements \Iterator { }
  3. // W chwili obecnej jest tak jak wyżej
  4. // Czy nie powinienem stosować jednak poniższego zapisu? Zacząłem odnosić wrażenie że poniższy podział na segmenty przestrzeni nazw jest wystarczający.
  5. namespace Enforcer\System\Libraries;
  6. class ClientLanguageCollection implements \Iterator { }
Jak sądzisz?

Innymi słowy chciałbym znaleźć jakąś regułę dotyczącą granic dzielenia klas na paczki.

Ten post edytował starach 14.09.2010, 21:42:14
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
@smentek: Co prawda nie ma to tutaj zastosowania, ale analogia jest jak najbardziej trafna.
Podał po prostu "ludzkie wytłumaczenie" idei przestrzeni nazw - dlatego zapytałem co to ma do rzeczy.

Cytat
Jak sądzisz?

Innymi słowy chciałbym znaleźć jakąś regułę dotyczącą granic dzielenia klas na paczki.
Bardzo ciężko odpowiedzieć nie znając całości (większego fragmentu) kodu. Jakiś sztywnych reguł nie ma. Jeżeli w Enforcer\System\Libraries miałbyś mieć 5 klas to ok, jeżeli 250 to już niezbyt to dobre będzie. Innymi słowy: to zależy (piszę to chyba 3. raz dziś :]).

Powinieneś się raczej kierować jakąś tam logiką przy tym podziale. W każdej przestrzeni powinny znaleźć się tylko powiązane tematycznie klasy/interfejsy. Jeżeli miałbyś skończyć na 10 przestrzeniach po dwie klasy mógłbyś pomyśleć o jakiejś bardziej ogólnej nazwie i zebrać to w jedną paczkę - oczywiście tylko w przypadku, gdyby wszystko dotyczyło tego samego "tematu".
Go to the top of the page
+Quote Post
starach
post
Post #6





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


No fakt od tego jest niby UML, ale FW w założeniu ma być bardzo modularny żeby poszczególne elementy można było rozwijać autonomicznie. Ciężko jest zaplanować każdą funkcjonalność - a co za tym idzie klasy - we wtyczce która z założenia ma być rozwijana przez choćby nawet tylko rok. Dlatego chyba będę stosował podejście nadmiarowe. Czyli muszę się jakoś pogodzić z nadwyżką segmentów w przestrzeniach nazw.

Go to the top of the page
+Quote Post
Zyx
post
Post #7





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


To nie jest kwestia przestrzeni nazw, tylko budowy Twojego frameworka. Teraz masz:

  1. namespace \Starach\Enforcer\Plugins\Pages\Controllers;
  2.  
  3. class Pages{ ... }


A gdybyś nie używał przestrzeni nazw, miałbyś pewnie

  1. class Starach_Enforcer_Plugins_Pages_Controllers_Pages{ }


U siebie staram się wszystko rozplanować tak, by drzewo katalogowe miało głębokość dochodzącą do 4 poziomów (gdzie poziom 4 to klasa), w ekstremalnych przypadkach dobijając do 5.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
starach
post
Post #8





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Problem w tym, że nie mam żadnego pomysłu jak je skrócić. Jak mówiłem mój FW bazuje na ideologii Kochany. Jakbyś dodawał do niej przestrzenie nazw to jakbyś to zrobił?

edit>
Teoretycznie można zamienić Enforcer_Plugins na EnfPlugin, ale jest to raczej taki plaster na dupę, a nie jakaś rewolucyjna zmiana. Wszystkie nazwy byłyby krótsze przynajmniej o jeden fragment gdyby nie hierarchiczność, ale może masz jakiś pomysł jak wyciąć jeszcze z jeden fragment.

Ten post edytował starach 18.09.2010, 09:09:59
Go to the top of the page
+Quote Post
Crozin
post
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Jakbyś dodawał do niej przestrzenie nazw to jakbyś to zrobił?
W ogóle bym się nie brał do pracy na tym czymś. winksmiley.jpg

Nam jest bardzo ciężko określić jak mógłbyś to przerobić, bo... bo nie znamy kodu, który prawdopodobnie trzebaby było przepisać (częściowo). Jedyne co mi się rzuca w oczy to podział na System i Plugins, który IMHO jest niepotrzebny, albo inaczej... mało wygodny. Tutaj mógłbym polecić rozwiązanie na kształt Symfony2 w postaci Bundles (jakoś żadne polskie tłumaczenie mi tutaj nie pasuje). Wtedy potworki typu: \Starach\Enforcer\Plugins\Pages\Controllers\Page. uprościły by się do czegoś w stylu: \Starach\PagesBundle\Controllers\Page. Przeskok z pięciu do trzech segmentów nazwy przestrzeni.
Go to the top of the page
+Quote Post
starach
post
Post #10





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


W ten sposób wywaliłeś Crozin część identyfikacyjną pluginu. Fakt faktem że można by to uprościć usuwając ją, ale wtedy klasa ładująca pluginy musiałaby sprawdzać każdą klasę - hmm możne z wyjątkiem ... dobra nie wszystkie. Dzięki zaraz zabiorę się za zmianę nazw na \Starach\Pages\* np. Controllers pozostaje tylko jeszcze kwestia aplikacji i systemu

Enforcer\Application\Controllers
Enforcer\System\Base\Application

Chociaż w sumie nie są one takie straszne i mieszczą się na dobrą sprawę w zasadzie ( max. 4 segmenty )

Dzięki.

Go to the top of the page
+Quote Post
Crozin
post
Post #11





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
W ten sposób wywaliłeś Crozin część identyfikacyjną pluginu.
Między innymi o to chodziło. winksmiley.jpg
Cytat
Fakt faktem że można by to uprościć usuwając ją, ale wtedy klasa ładująca pluginy musiałaby sprawdzać każdą klasę - hmm możne z wyjątkiem ... dobra nie wszystkie.
Akurat sposób z Sf2, który zaproponowałem działa na trochę innej zasadzie - nie wyszczególnia się w nim czegoś takiego jak "system" i "pluginy", mimo, iż takowe w sumie istnieją. Rozwiązuje to też problem z Twoim "system".

Przeczytaj sobie na stronach Sf2 - mi się nie chce rozpisywać. Nie mówię, żebyś Copy&Paste robił, ale abyś spojrzał na problem z nieco innej perspektywy.
Go to the top of the page
+Quote Post
manro
post
Post #12





Grupa: Zarejestrowani
Postów: 9
Pomógł: 3
Dołączył: 25.10.2006

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


Cytat
Mam FW podobny w miarę strukturą katalogów do Kohany. Jakiś czas temu dodałem w nim przestrzenie nazw...

Wydaje mi się, że za bardzo skupiłeś się tutaj na odwzorowaniu struktury katalogów na namespacy. Nie wydaje mi się aby to miało jakikolwiek sens.
Przecież w własnym FW raczej nie będziesz miał kolizji nazw dlaczego nie zastosować jednego poziomu


--------------------
If you don't have time to do it right, where are you going to find the time to do it over?
http://www.nowicki.cjb.net
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: 19.08.2025 - 04:03