Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: VladSun в Oct 22, 2008, 16:01



Титла: Mvc, acl и reflection
Публикувано от: VladSun в Oct 22, 2008, 16:01
Здравейте!
От известно време се мъча да сътворя MVC PHP framework, в който логиката за ACL да е изнесена от всички класове (M-V-C). Идеята ми е да използвам Reflection класовете на PHP5 и да капсулирам публичните методи и полета на тези класове (един вид, тяхното "API") в подобен на Decorator (wrapper) клас, който да управлява достъпа до тях на базата на данни (правила) взети от някакъв Storage клас.
Темата е разисквана и в един друг PHP форум, но все си мисля, че и тука ще бъде в интерес и се надявам на дискусия.
За да не дублирам съдържание, на тези адреси може да намерите дискусия по темата, малко код и малко тестове:
http://forums.devnetwork.net/viewtopic.php?f=50&t=89528
http://forums.devnetwork.net/viewtopic.php?f=19&t=89300


Титла: Mvc, acl и reflection
Публикувано от: VladSun в Oct 28, 2008, 18:06
Няма ли PHP екстремисти тука :D
BULFON?


Титла: Re: Mvc, acl и reflection
Публикувано от: lkr в Oct 30, 2008, 09:14
Не и когато става въпрос за PHP + MVC, long live Ruby :)


Титла: Re: Mvc, acl и reflection
Публикувано от: BULFON в Oct 30, 2008, 10:11
Има, но нека първо подкараме този форум (само да видиш него как са го писали) да работи като хората, пък ще говорим и за PHP + MVC


Титла: Re: Mvc, acl и reflection
Публикувано от: VladSun в Oct 30, 2008, 14:12
само да видиш него как са го писали

Аз вече видях ... Издигнали са SWITCH-a в култ :)


Титла: Re: Mvc, acl и reflection
Публикувано от: VladSun в Oct 30, 2008, 14:18
Не и когато става въпрос за PHP + MVC, long live Ruby :)

Въпросът е по-скоро концептуален - тъй като механизмите за контрол на достъпа (също така и историята  на действията) са cross-cutting concern ($2).
И това не зависи много от използвания език за програмиране.


Титла: Re: Mvc, acl и reflection
Публикувано от: Йордан в Oct 30, 2008, 15:04
А добре какъв е смисъла да е толкова сложно? Толкова е сложно, че се затруднявам дори да ти разбера идеята. Това решение мислиш ли, че ще е с хубав перформанс?


Титла: Re: Mvc, acl и reflection
Публикувано от: VladSun в Oct 30, 2008, 15:30
Сложно? Не :)

Сега имаш:
Код
GeSHi (PHP):
  1. // Controller
  2. if ($ACL->hasPermition('edit', 'profile'))
  3. {
  4. $this->model->editProfile();
  5. }
  6.  
  7. // Model
  8. if ($ACL->hasPermition('edit', 'username'))
  9. {
  10. $this->username = $reguest->post->username;
  11. }
  12.  
  13. // View
  14. if ($ACL->hasPermition('edit', 'username'))
  15. {
  16. $this->template->display('usernameTextBoxEditable');
  17. }
  18. else
  19. {
  20. $this->template->display('usernameTextBoxReadonly');
  21. }

А аз искам (примерно):

Код
GeSHi (PHP):
  1. // Controller
  2. $this->model->editProfile();
  3.  
  4. // Model
  5. $this->username = $reguest->post->username;
  6.  
  7. // View
  8. $this->template->display('usernameTextBoxEditable');
  9. $this->template->display('usernameTextBoxReadonly');

Т.е. MVC обектите да предоставят всичкия необходим код за редактиране и изобразяване на информацията без да се интересуват от прават на текущия потребител.

Сложното е да се измисли и имплементира класът, който управлява чрез капсулация тези обекти и за това е разискването тук. Но след  като той е готов, разработването на същинската част от дадено уеб приложение - MVC класовете е в пъти по-лесно. Би се постигнала такава гранулация и лекота на манипулацията на правата на потребителя (при това в "runtime"), която в момента е немислима.

По отношение на производителността - в горните линкове съм направил няколко тестове - естествено има спад, но дали той ще се отрази на система, в която bottleneck-а не е PHP кода (а примерно DB заявките и/или template системата, както обикновено) е малко вероятно.


Титла: Re: Mvc, acl и reflection
Публикувано от: Йордан в Oct 30, 2008, 16:23
Това ясно. Моята идея беше, че като правиш такава сложна система получаваш нисък перформанс. Също така в 90% от случайте трудно би ползвал един код на много места. И не знам колко има сметка да се пише такова нещо :)


Титла: Re: Mvc, acl и reflection
Публикувано от: VladSun в Oct 30, 2008, 16:30
Това ясно. Моята идея беше, че като правиш такава сложна система получаваш нисък перформанс.
Не мисля така, но ще тествам малко по-реални случаи - с DB заявки, примерно и ще видим :)

Също така в 90% от случайте трудно би ползвал един код на много места.

Аз осигурявам само слой върху MVC pattern-a, нищо повече :)

И не знам колко има сметка да се пише такова нещо :)
О-о, има, има! :)