![]() |
Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 14.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam, ostatnio zastanawiam sie w jaki sposob napisac jadro systemu webowego w php - doszedlem do wniosku, ze najlepiej uzyc singletonow do tworzenia instancji klas (db, io, klasa sesji, szablonow itp.) czy jednak lepiej aby jadro bylo rozproszone (wiele klas, kazda posiadajaca metode instance() ) czy raczej napisac jeszcze jednak klase Kernela, ktora to klasa przechowywala by w sobie metody tworzenia instancji i instancje wszystkich podsystemow, oraz kontrolowala wszelkie proby uzyskania takiej instancji ?
Jestem ciekaw jak wy to widzicie ? w jaki sposob wy pisaliscie rdzen systemu ? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 14.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
Czy dobrym pomyslem jest wg. was stworzenie klasy jadra, ktora tworzy instancje wszystkich obiektow (singletonow), bibliotek i sprawdza ew. skad zostalo przyslane rzadanie o instancje danego obiektu ? U mnie taka klasa wyglada mniej wiecej tak:
[php:1:8cbc7c0737]<?php class Kernel { static private $arrInstances = array(); static function GetInstance( $strInstanceName = 'Kernel' ) { if( empty( self::$arrInstances[$strInstanceName] ) ) { self::$arrInstances[$strInstanceName] = new $strInstanceName; } return self::$arrInstances[$strInstanceName]; } static function CreateDBInstance( $objDBConfig ) { require_once( 'db_drivers/' . $objDBConfig->GetUsedDB() . '.class.php' ); if( empty( self::$arrInstances['DB'] ) ) { self::$arrInstances['DB'] = new DB( $objDBConfig->GetHostName(), $objDBConfig->GetUserName(), $objDBConfig->GetPassword(), $objDBConfig->GetDBName() ); } return self::$arrInstances['DB']; } } ?>[/php:1:8cbc7c0737] i przykladowe uzycie w aplikacji: [php:1:8cbc7c0737]<?php class App { private $objDB = null; private $objIO = null; private $objConfig = null; private $objSession = null; private $objTemplate = null; private $objTimer = null; private $objPage = null; function __construct() { $this->objTimer = Kernel::GetInstance( 'Timer' ); $this->objTimer->CreateTimer( 'main_timer' ); $this->objDB = Kernel::CreateDBInstance( Kernel::GetInstance( 'DBConfig' ) ); $this->objIO = Kernel::GetInstance( 'IO' ); $this->objConfig = Kernel::GetInstance( 'Config' ); $this->objSession = Kernel::GetInstance( 'Session' ); $this->objTemplate = Kernel::GetInstance( 'Template' ); $this->objPage = Kernel::GetInstance( 'Page' ); } } ?>[/php:1:8cbc7c0737] moze lepiej byloby to rozwiazac inaczej ? Czy w ogole warto tworzyc osobna klase reprezentujaca jadro systemu, czy moze umieszczac wszystko bezposrednio w kodzie aplikacji ? |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.06.2024 - 01:04 |