[...] my second attempt was to create a singleton, but the problem is that my model needs configuration data in order to be instantiated correctly. So whenever I would call the getInstance (...) method I need to have the model's configuration data available as I can't always be sure that the getInstance method has been called before and an instance of the model class already exists.

[...] I wanted to create a Registry class, add my model to it and access it from whatever method I want. This however makes unit testing harder and has all the site effects which global variables have.

Sounds like you might find some answers in reading about Dependency Injection. I've come across this recently, and it's helped my thinking around some of these issues. http://www.martinfowler.com/ articles/injection.html I think the key here is the concept of the "container". It's like a class configuration registry.

There was also a good article about Dependency Injection in a recent php|architect issue:
http://www.phparch.com/issue.php?mid=82

The idea of implementing a generic container seemed a little overkill for most of what I was doing. I've found myself using static methods to configure a class (rather than a singleton), and I place my configuration code in a bootstrap file. For example, the bootstrap file might look something like:

require_once 'Proj/SomeModel.php';

Proj_SomeModel::configure(array(
   'option1' => 'some value',
   'option2' => 'another value',
));

The boostrap could either be a global one, or one that could be required only when I knew I was going to work with the model. The model object would then access these static config values within the constructor when instantiating itself. Using a model becomes a simple as:

require_once 'model-bootstrap.php';

$model = new Proj_SomeModel();

Don't know if this is helpful, or just rehashing things you've already tried. Care to share more details about what you've tried so far?

-- Dell



_______________________________________________
New York PHP Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk

NYPHPCon 2006 Presentations Online
http://www.nyphpcon.com

Show Your Participation in New York PHP
http://www.nyphp.org/show_participation.php

Reply via email to