Jump to content

Factory pattern and autoloading.


RuleBritannia

Recommended Posts

Hello

 

I hear alot of talk about reusing a database connection and attempts to solve this.

 

I came across this post on stackoverflow but am having difficulty understanding as to how this is any different than just creating a instance in a single file and including it via include, require or autoload wherever a db instance is needed.

 

The pattern talked about in the post is the factory pattern, it seems that the factory is responsible for creating the instance, something which I thought autoloading did without this additional code?

 

Another thing I am still confused by with all the reuse talk - If 2 seperate users request 2 different pages on our server(2nd user 0.1 second behind the other user) which both refer back to the same db file/factory, are 2 instances created? or is the previuos users instance somehow used aslong as there request has not finished?

I thought that the server would make new fresh requests/variables/instantiation etc all over again for every user, perhaps I am wrong.

 

Thanks in advance.

Edited by RuleBritannia
Link to comment
Share on other sites

Hi,

 

you're confusing many different things which have nothing to do with each other.

 

Autoloading automatically includes class definitions, nothing more, nothing less. It does not create instances in any way.

 

The Factory Pattern is a specific way of instantiating classes. It's meant to make the instantiation more flexible and allow you to easily exchange one class for a similar class.

 

The term “reuse” refers to code reuse. The point is that you are able to reuse your code in different contexts instead of starting all over again everytime. It has nothing to do with resource sharing or anything like that.

Link to comment
Share on other sites

Hi,

 

you're confusing many different things which have nothing to do with each other.

 

Autoloading automatically includes class definitions, nothing more, nothing less. It does not create instances in any way.

 

The Factory Pattern is a specific way of instantiating classes. It's meant to make the instantiation more flexible and allow you to easily exchange one class for a similar class.

 

The term “reuse” refers to code reuse. The point is that you are able to reuse your code in different contexts instead of starting all over again everytime. It has nothing to do with resource sharing or anything like that.

 

 

I should of been more specific, If I instantiate a class(lets say connection) and store it in a variable, then include this everywhere needed and pass around in constructors, why would I need a factory?

 

As for the term reuse meaning in a code reuse context, I dont believe that is how it was meant, I am sure I have seen on many occasions people saying "you dont want to be creating a new connection, you reuse a database connection already opened."

 

The problem I have here is understanding how if we use factory or autoload, each one instansiate's lets say a connection(with new), how is this reusing a connection?

Edited by RuleBritannia
Link to comment
Share on other sites

You should look up how autoloading actually works and what it does. I think this will eliminate the confusion. You cannot “instantiate a class and autoload it everywhere”. As I already said, autoloading can be used to load class definitions. You cannot load arbitrary scripts.


 


I think you should forget about the Factory Pattern for now. It has absolutely nothing to do with the general problem of instantiating classes. It's an advanced design concept which you may use when you're familiar with the basics and try to improve your code.


 


Resource sharing is yet another topic. I think you should postpone this as well. Before you jump into the advanced stuff, make sure you understand the basics (like autoloading).

Link to comment
Share on other sites

 

You should look up how autoloading actually works and what it does. I think this will eliminate the confusion. You cannot “instantiate a class and autoload it everywhere”. As I already said, autoloading can be used to load class definitions. You cannot load arbitrary scripts.

 

I think you should forget about the Factory Pattern for now. It has absolutely nothing to do with the general problem of instantiating classes. It's an advanced design concept which you may use when you're familiar with the basics and try to improve your code.

 

Resource sharing is yet another topic. I think you should postpone this as well. Before you jump into the advanced stuff, make sure you understand the basics (like autoloading).

 

 

So using the factory pattern, does this allow resource sharing?

 

As for autoloading and including I should not of mixed them throughout this thread, but what I was trying to say is if I had a file with the following code

db.php
$db = new PDO('...

If I include this everywhere a db instance is needed, how is this different to calling a factory pattern class(Which creates or reuses a instance)?

 

Arnt either of these methods using a new created instance at the begining and resuing a instance if called anytime after?

Link to comment
Share on other sites

So using the factory pattern, does this allow resource sharing?

No.

 

As for autoloading and including I should not of mixed them throughout this thread

Indeed, autoloading is not what you think it is.

 

If I include this everywhere a db instance is needed, how is this different to calling a factory pattern class(Which creates or reuses a instance)?

You still don't understand what a factory is for. On a side note, creating some $db variable and passing it around everywhere is going to be unmaintainable and has a very high potential of breaking. Don't rely on global state.

Link to comment
Share on other sites

Creating an instance and including it in different scripts also gives you only a single object, whereas autoloading gives you the class and lets you instantiate it as often as you want. Those are obviously two entirely different things.

 

For example, let's say I have a File class which represents one file, and I want to use this class everywhere in my project. It wouldn't help me to create a single instance and pass it around. But auto-loading the class does make sense.

 

Last but not least, I think you confuse simple static factory methods with The Factory Pattern. Those are two different things.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.