Creates an employee record in a time and attendance database and returns the employee object I am writing a time and attendance system.  This is my idea of a simple elegant solution for the employee class. To me it makes the client very simple an encapsulates everything it needs, however I an new to Object Orientated Design and would appreciate a review.  I plan to create the other classes like this but fear there may be a better way.

My employee class...

 class Employee
    {
        public static Employee CreateNew(string forename, string surname)
        {
            Employee employee = new Employee(forename, surname);
            AddToDataBase(employee);
            return employee;
        }

        public string Forename { get; set; }
        public string Surname { get; set; }


        private Employee(string forename, string surname)
        {
            this.Forename = forename;
            this.Surname = surname;
        }

        private static void AddToDataBase(Employee employee)
        {
          //code to add employee to database  

        }
    }


usage...

Employee.CreateNew("Bob", "Smith");
It is common practice to use static methods-creators instead of constructors. But this approach is used in cases where you need to convert some objects to the object of desired type. It is the main reason for such methods – conversion from one representation to another.

But you use your CreateNew method for side effects and it is not good in my opinion. If I call CreateNew I'll expect just to get a new instance of the Employee. I don't expect that this method will do something else.

I would create method AddNewEmployeeAndAddToDB but not in the Employee class. Adding to database is not a part of employee functionality.