views:

43

answers:

2

Hi there,

I am currently working on a little application: The structure follows in some way the MVC pattern. For short it has the basic things, Models, Controllers etc.

Now I am sitting here and do not know whether :


1.

The SQL database is only managed by a model through methods the programmer gives him like: "Hey we have name record so we need a getName() method".

OR

2.

The model dynamically creates the whole database and methods, using a XML file, with which even a non-programmer can design a database.

And should the model class check every/a single request whether it is a valid request e.g. getName() won't work on the houses_tbl, and if it is not valid it does not perform the query, and sends back an error message instead?


I have absolutely no idea how to handle my model class, which structure it should follow and how much the programmer should have to put into a new model so it works as he wants it to work.


Major points:

  • perfomance (which way saves the most perfomance)
  • KISS (which way is simple enough, so a second team mate can understand my logic)
  • extendability (can I extend the structure)
+1  A: 

Why not statically create the objects etc. during development from the database. i.e. use some Object-Relational-Mapping ?

That way you create your Person object from (say) the database schema. It creates a getName() accessor, and the rest of your code compiles against that. If you remove/rename the name field, then the generated code changes and consequently stuff doesn't compile. Catching these errors early will save a lot of grief.

This question details some PHP/ORM options. I confess I've not checked these to see if they're entirely what you want, but hopefully they should point you in the right direction.

Brian Agnew
+1  A: 

Check these Data Source Architectural Patterns: Table Data Gateway, Row Data Gateway, Active Record, Data Mapper. For code examples to these patterns in PHP, you could check Zend_DB_*.

Which pattern you should pick depends on your application. If you are doing a simple CRUD application, you might want to use Row Data Gateway. If you are building an application with a lot of business logic from a certain domain, you will likely pick a different one.

Just remember that the M in MVC is not just the Persistence layer. The model is the heart of your application. Controller and View are just an end to your application. Further reading by Rob Allen and Matthew Weier O'Phinney.

As for your major points, I suggest to just stick to general established practises. UnitTest your code, write meaningful code and document it, favor aggregation over composition, capsule and separate concerns, code against an interface, refactor, etc.

Gordon