Hi,

Gladly I did not totally remove my "singleton versions" of my models.
I'll see this thread through and decide then what to do with my models.

-If there are this performance boost, it's a go-go for singletons
-If there are too many (possible) problems, it's a no-go for singletons

My models are just shared resources for dealing with some data (DbTables,
Acl, Xml or whatever datasource). BUT if I'll go with the singletons, I need
to get my head around state-issues on singletons.

br, Marko


Ed Lazor-3 wrote:
> 
> Since I'm trying to get a better understanding, and since we seem to
> be mixing several issues here, let me try to clarify and see if you
> agree.
> 
> As per Wiki, a global variable is a variable that is accessible in
> every scope....  They are usually considered bad practice precisely
> because of their nonlocality: a global variable can potentially be
> modified from anywhere, (unless they reside in protected memory) and
> any part of the program may depend on it. A global variable therefore
> has an unlimited potential for creating mutual dependencies, and
> adding mutual dependencies increases complexity.
> 
> Singletons are considered bad practice, when used as a form of
> universal data storage, because, like global variables, they have an
> unlimited potential for creating mutual dependencies.
> 
> I realize some people are saying that Singletons should never be used.
>  If that's the case, why are they used in Zend Framework?   For
> example, Zend_Auth, Zend_Registry, Zend_Loader_Autoloader, and
> Zend_Controller_Front.  Aren't these good examples of where Singletons
> are beneficial?
> 
> How do you know when it's ok to use Singletons?  It seems like
> Singletons are beneficial, when used to share a single resource,
> because they have the potential for improving performance, and
> reducing application complexity.
> 
> Let me use Michael's Factory class as an example.  Sure, you could
> probably rename the class Singleton for clarity.  In fact, the
> getInstance method could be moved inside the class of the objects
> being generated through the Factory class.
> 
> To demonstrate this, you'd create a class called Users that extends
> Zend_Db_Table and you'd give it a method called getInstance.  Doing
> this, you would effectively create a shared resource that serves as a
> link to the Users database.  Whenever you would use
> 
> $Users = new Users();
> 
> You could instead use
> 
> $Users = Users::getInstance();
> 
> That way, instead of reinstantiating an instance of Users all over the
> application, you call getInstance and re-use the same object as often
> as you'd like - giving the 7X performance boost Michael was
> mentioning.
> 
> And then, adding to the idea a little here, instead of manually adding
> the getInstance method to every one of your Zend_Db_Table objects, you
> could create a base class with this method that you can extend from.
> Or, if you don't have PHP5.3, you can achieve the same thing by using
> the Factory class that Michael presented.
> 
> It might seem like a minor adjustment to use a common instance of a
> Zend_Db_Table object when working with a specific table throughout
> your application.  If that 7X performance boost reduces your page load
> from 49 seconds to 7 seconds, isn't it worth it?
> 
> Yes - I realize there are other performance enhancements available as
> well, cacheing, etc., but this one seems worthwhile also.  Or... am I
> just barking up the wrong tree and asking for trouble later on?
> 
> Make sense?  What do you think? Matthew?
> 
> -Ed
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Models-as-Singletons-tp24575704p24639257.html
Sent from the Zend Framework mailing list archive at Nabble.com.

Reply via email to