On 7/2/05, David Zülke <[EMAIL PROTECTED]> wrote:
> You're wrong. Read an OO programming book. There won't be a new instance of
> GoodSingletonModel because the instances array sits in SingletonModel.
> BadSingletonModel only overwrites getInstance and $instance only for itself.

Illustrate it in tests, they're cheaper than books. 

1. Why are do I need to tell MyCrazySingleton's getInstance what class
I want an instance of?
2. Why does MyCrazySingleton have instances of other singletons?
3. The singletonmodel's tests should be in a file on their own rather
than interspersed with model's tests so that it's clear what we're
testing.
4. I think it would be a lot cleaner if you used is_subclass_of() to
check the method of instantiating to use

if (is_subclass_of($class, 'SingletonModel')) {
 $model = $class::getInstance();
} else {
  $model = new $class;
}
$model->initialize($this->context);
return $model;

?


I'm seriously getting in the car now.. 
bye!
-Mike

> 
> - David
> 
> ________________________________________
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
> Behalf Of graeme
> Sent: Saturday, July 02, 2005 12:46 PM
> To: Agavi Development
> Subject: Re: [agavi-dev] Singleton
> 
> No what I'm trying to say is this:
> 
> GoodSingletonModel extends SingletonModel
> {
>  // lots of model specific code
> }
> 
> BadSingletonModel extends SingletonModel
> {
>  // lots of model specific code plus
>  protected function getInstance
>  {
>   $instance = array(); // just for the hell of it
>  parent::("BadSingletonModel"); // I'm an empowered programmer who
> doesn't know what I doing
>  }
> }
> 
> ...
> 
> $gSM = getInstance("GoodSingletonModel");
> $gSM->.... // lots of code setting up
> 
> // at this point the $instance array has an entry for GoodSingletonModel
> // so $gSM2 = getInstance("GoodSingletonModel"); would get the instance
> 
> $bSM = getInstance("BadSingletonModel");
> // now the $instance array doesn't have an entry for GoodSingletonModel
> // so $gSM2 = getInstance("GoodSingletonModel"); would create a new instance
> 
> By making $instance private the above code for BadSingletonModel would fail
> unless $instance is redeclared and then SingletonModel class would use its
> version whilst the BadSingletonModel would use its version, and
> GoodSingletonModel would still be happy.
> 
> 
> graeme.
> 
> 
> David Zülke wrote:
> Uh... no, because the other models that are supposed to work as singletons
> will still "extends SingletonModel" and thus not be affected if
> "MyCustomModelThatImplementsSingletonDifferentlyModel extends
> SingletonModel" should decide to redeclare $instance or getInstance()
> 
> - David
> 
> 
> 
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
> Behalf Of graeme
> Sent: Saturday, July 02, 2005 12:23 PM
> To: Agavi Development
> Subject: Re: [agavi-dev] Singleton
> 
> I guess it a matter of style, but by making it private you are
> essentially saying this is my variable and I'm looking after it.
> 
> I would also add that by making it protected a person could come along
> and not redeclare it but clear it meaning that other singleton objects
> will be lost and so they will need to be recreated in the process losing
> the data that was put in them.
> 
> graeme
> 
> David Zülke wrote:
> 
> 
> You're right, but what's the problem about the var being protected. Not
> publicly accessible, but you can change it by subclassing. I'm sure that
> 
> if
> 
> I make it private, one day someone will show up and ask why it isn't
> protected because he needs to do blah blah blah ;)
> 
> - David
> 
> ________________________________________
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
> Behalf Of graeme
> Sent: Saturday, July 02, 2005 12:00 PM
> To: Agavi Development
> Subject: Re: [agavi-dev] Singleton
> 
> But why would you want to offer that? Surely the point of putting code in
> 
> a
> 
> framework is so that a developer doesn't need need to go down that path.
> 
> All
> 
> it would provide (as I can see) is the ability to create a smaller array
> with which to do the search for isset.
> 
> graeme.
> 
> David Zülke wrote:
> It's protected to allow sublasses to implement the singleton
> 
> functionality
> 
> themselves. You cannot redeclare a private member, and $instance is the
> common name for the instance variable.
> 
> - David
> 
> 
> 
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
> Behalf Of graeme
> Sent: Saturday, July 02, 2005 11:25 AM
> To: 'Agavi Development'
> Subject: [agavi-dev] Singleton
> 
> Just had a peek at the code for SingletonModel. (revision 151)
> 
> I think the $instance array should be private. Only that class wants to
> be able to manage the array list whilst, yes constructors should be
> protected allowing the subclasses to modify the constructor.
> 
> graeme.
> 
> _______________________________________________
> agavi-dev mailing list
> [email protected]
> http://labworkz.com/cgi-bin/mailman/listinfo/agavi-dev
> 
> 
> 
> 
> _______________________________________________
> agavi-dev mailing list
> [email protected]
> http://labworkz.com/cgi-bin/mailman/listinfo/agavi-dev
> 
> 
> 
> 
> 
> _______________________________________________
> agavi-dev mailing list
> [email protected]
> http://labworkz.com/cgi-bin/mailman/listinfo/agavi-dev
> 
> 
> 
> 
> 
> _______________________________________________
> agavi-dev mailing list
> [email protected]
> http://labworkz.com/cgi-bin/mailman/listinfo/agavi-dev
> 
> 
> 
> 
> _______________________________________________
> agavi-dev mailing list
> [email protected]
> http://labworkz.com/cgi-bin/mailman/listinfo/agavi-dev
> 
> 
> 
> 
> 
> _______________________________________________
> agavi-dev mailing list
> [email protected]
> http://labworkz.com/cgi-bin/mailman/listinfo/agavi-dev
>
_______________________________________________
agavi-dev mailing list
[email protected]
http://labworkz.com/cgi-bin/mailman/listinfo/agavi-dev

Reply via email to