Автор Тема: Mvc, acl и reflection  (Прочетена 4052 пъти)

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Mvc, acl и reflection
« -: 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
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Mvc, acl и reflection
« Отговор #1 -: Oct 28, 2008, 18:06 »
Няма ли PHP екстремисти тука :D
BULFON?
« Последна редакция: Oct 29, 2008, 02:39 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

lkr

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Re: Mvc, acl и reflection
« Отговор #2 -: Oct 30, 2008, 09:14 »
Не и когато става въпрос за PHP + MVC, long live Ruby :)
Активен

BULFON

  • Administrator
  • Напреднали
  • *****
  • Публикации: 478
  • Distribution: Fedora
  • Window Manager: Gnome
    • Профил
Re: Mvc, acl и reflection
« Отговор #3 -: Oct 30, 2008, 10:11 »
Има, но нека първо подкараме този форум (само да видиш него как са го писали) да работи като хората, пък ще говорим и за PHP + MVC
Активен

фонокартен телефонен апарат

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Mvc, acl и reflection
« Отговор #4 -: Oct 30, 2008, 14:12 »
само да видиш него как са го писали

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

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Mvc, acl и reflection
« Отговор #5 -: Oct 30, 2008, 14:18 »
Не и когато става въпрос за PHP + MVC, long live Ruby :)

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

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

Йордан

  • Напреднали
  • *****
  • Публикации: 1451
  • Distribution: Ubuntu / Gentoo
  • Window Manager: Gnome
  • не е важно колко ти е голяма пишката, а какво можеш с нея
    • Профил
    • WWW
Re: Mvc, acl и reflection
« Отговор #6 -: Oct 30, 2008, 15:04 »
А добре какъв е смисъла да е толкова сложно? Толкова е сложно, че се затруднявам дори да ти разбера идеята. Това решение мислиш ли, че ще е с хубав перформанс?
Активен

Всеки пост - отговор на въпрос !!!

Йордан Георгиев
http://ygeorgiev.net/

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Mvc, acl и reflection
« Отговор #7 -: 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 системата, както обикновено) е малко вероятно.
« Последна редакция: Oct 30, 2008, 15:44 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

Йордан

  • Напреднали
  • *****
  • Публикации: 1451
  • Distribution: Ubuntu / Gentoo
  • Window Manager: Gnome
  • не е важно колко ти е голяма пишката, а какво можеш с нея
    • Профил
    • WWW
Re: Mvc, acl и reflection
« Отговор #8 -: Oct 30, 2008, 16:23 »
Това ясно. Моята идея беше, че като правиш такава сложна система получаваш нисък перформанс. Също така в 90% от случайте трудно би ползвал един код на много места. И не знам колко има сметка да се пише такова нещо :)
Активен

Всеки пост - отговор на въпрос !!!

Йордан Георгиев
http://ygeorgiev.net/

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Mvc, acl и reflection
« Отговор #9 -: Oct 30, 2008, 16:30 »
Това ясно. Моята идея беше, че като правиш такава сложна система получаваш нисък перформанс.
Не мисля така, но ще тествам малко по-реални случаи - с DB заявки, примерно и ще видим :)

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

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

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

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P