views:

443

answers:

4

Hi Guys,

After developing in CodeIgniter for awhile, I find it difficult to make decision as to when do i create a custom library and when do i create a custom helper.

I do understand that both allows you to have business logic in it and is reusable across the framework(calling from different controller etc.)

But I strongly believe that the fact the CI core developers are separating libraries from helpers, there got to be a reason behind it and I guess, this is the reason waiting for me to discover and get enlightened.

CI developers out there, pls advise.

i think it's better to include an example.

I could have a

class notification_lib { function set_message() {

}

function get_message() {

}

function update_message() {

}

}

Alternatively, i could also include all the functions into a helper.

In a notification_helper.php file, i will include set_message(), get_message(), update_message()..

Where either way, it still can be reused. So this got me thinking about the decision making point about when do we exactly create a library and a helper particularly in CI.

In a normal(framework-less) php app, the choice is clear as there is no helper, you will just need to create a library in order to reuse codes. But here, in CI, I would like to understand the core developers seperation of libraries and helpers

A: 

Personally I use libraries for big things, say an FTP-library I built that is a lot faster than CodeIgniters shipped library. This is a class with a lot of methods that share data with each other.

I use helpers for smaller tasks that are not related to a lot of other functionality. Small functions like decorating strings might be an example. Or copying a directory recursively to another location.

Christoffer
i think the key concept here is 'a class with a lot of methods that share data with each other'
+2  A: 

Well the choice comes down to set of functions or class. The choice is almost the same as a instance class verses a static class.

If you have just a simply group of functions then you only need to make a group of functions. If these group of functions share a lot of data, then you need to make a class that has an instance to store this data in between the method (class function) calls.

Do you have many public or private properties to store relating to your notification messages?

If you use a class, you could set multiple messages through the system then get_messages() could return a private array of messages. That would make it perfect for being a library.

Phil Sturgeon
yes, this makes more sense...
If it has answered your question please mark my answer as Accepted.
Phil Sturgeon
@Phil, you need to give a bribe. :p +1
Thorpe Obazee
I have been cheated! Oh the shock, the horror, the indecency! Won't somebody think of the children! :'(
Phil Sturgeon
+1  A: 

First of all, you should be sure that you understand the difference between CI libaray and helper class. Helper class is anything that helps any pre-made thing such as array, string, uri, etc; they are there and PHP already provides functions for them but you still create a helper to add more functionality to them. On the other hand, libaray can be anything like something you are creating for the first time, any solution which might not be necessarily already out there.

Once you understand this difference fully, taking decision must not be that difficult.

Hope that helps.

Thanks

Sarfraz
A: 

There is a question I ask myself when deciding this that I think will help you as well. The question is: Am I providing a feature to my framework or am I consolidating?

If you have a feature that you are adding to your framework, then you'll want to create a library for that. Form validation, for example, is a feature that you are adding to a framework. Even though you can do form validation without this library, you're creating a standard system for validation which is a feature.

However, there is also a form helper which helps you create the HTML of forms. The big difference from the form validation library is that the form helper isn't creating a new feature, its just a set of related functions that help you write the HTML of forms properly.

Hopefully this differentiation will help you as it has me.

ocdcoder
What a bunch of crap. Adding anything is adding a feature to your framework. The one and only difference between libraries and helpers are functions versus classes. If you need to share data between functions, then a class (library) is the way to go.
Phil Sturgeon
Phil, when it comes down to it the two mindsets aren't that different. It generally happens that when you consolidate functions, you don't need to pass information amongst the functions. But there are times when you'd want to pass information amongst the functions, but not make a library for it. And my proposed mindset handles that case. Helpers give a sort of freedom that libraries usually are built to protect against. In libraries, you are recommended(/required) to use its functions, helpers are just there and can be called whenever. Thats something i take into consideration when designing.
ocdcoder