Hello,
 
I'm working on a project now and I'd like to get some feedback on how to
implement a proper class (or two).

This is an application that records an employee's used vacation time.
There are two tables: (1) events, (2) users.

Users:

id (int)
name (varchar)
email (varchar)
balance (mediumint, stored in seconds) // this is the balance for
                                       // the user after all events
                                       // have been accounted for.
accrual (smallint, stored in seconds)
is_manager (bool)

Events:

id (int)
uid (int, users.id)
date (date)
duration (smallint, stored in seconds)
balance (smallint, stored in seconds) // this is the balance for
                                      // the user at the time the
                                      // event was added.
created (datetime)


Currently I have just one class called User that looks like this:


(I'm dealing with PHP4.)

class User
{
        var id;
        var name;
        var email;
        var balance;
        var accrual;
        var is_manager;

        function User($user_id)
        {
                $this->id = $user_id;
                $this->name = get_name();
                // ...
                $this->accrual = get_accrual();
        }

        function get_name()
        {
                // get name from db
                $sql = "...";

                $db =& DB::singleton();
                $db->execute($sql);
        }

        function get_email()
        function get_accrual()
        function is_manager()
        {
                // same as above more or less
        }

        function get_events()
        {
                // this function gets all the events for
                // the current users and returns them
                // as an array.
        }

        function add_event()
        {
                // this function adds a single event for
                // the current user. it also recalculates
                // the 'balance' for each event because
                // of data display requirements.
        }

        function del_event($event_id)
        {
                // delete an event from the current user's
                // events list based on $event_id.
        }
}


As I started to write this and use it I get the feeling that there
should also be an Event class that is extended by the User class. Reason
being that each User object is a reference to the currently logged in
user, not anyone else. But if you're a manager you have the
responsibility to approve/deny and/or add/delete events for your
employees.

But with that in mind I've gone from a class that handles the currently
logged in user to one that handles the currently logged in user plus any
number of other users.

I guess I'm thinking of this in the same terms as db normalization. Ex:
I could add an extra price_level column to my products table each time I
need a new pricing level but it's probably better to create a separate
table called products_prices. It's slightly more complicated but it
would allow me to have as many pricing levels as I want without
modifying my databse or code.


I'd appreciate any kind of feedback on this. If I haven't been clear
with something please let me know.



Thanks,
Chris.

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to