While designing this software, I quickly went for POO where plugins are classes that can extend an interface we will define.
Option 1 - the trivial
Now the tricky part, how do you retrieve the data from your database
Option 2 - an other more efficient approach
An other option is to have an object which is sort of a Column, and then I iterate the other way around. I go field by field and query the value for all the users. In that way the plugins can implement whatever they want. In fact they don't even need to use the actual database, but could get the data from different sources. Interesting perspective, but I don't know how important.
Option 3 - SQL request building
I ask the plugin to send me the information I need to build an SQL request that retrieves all the information at once for all the users. It's nice because it makes it easy to sort and filter, but isn't that mixing the controller layer and the model layer ? And then the plugin can actually bug the request if they are not done properly.
That's where I am at... any suggestion ??? Comments ? Idea ? Experience ?
I enclosed a document talking about the project that has some more information about this problem. But it's still a draft... just in case you wanna know more about it.