I am trying to work out the best way to design a class that has its properties persisted in a database. Let’s take a basic example of a Person. To create a new person and place it in the database, I want the DateOfBirth property to be optional (i.e. NULLable in the DB).
Here’s my sample code:
namespace BusinessLayer
{
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
}
I’m unsure as to whether the fields should be public or not. Should I do it like this:
class Program
{
static void Main(string[] args)
{
Person person1 = new Person("Kate","Middleton",null);
}
}
or like this:
class Program
{
static void Main(string[] args)
{
Person person1 = new Person();
person1.FirstName = "Kate";
person1.LastName = "Middleton";
}
}
I’m also wondering how I should be dealing with the optional properties of the class. Once the fields have been populated how do I then save them to the DB? I have a DatabaseComponenet class to save the information. How do I deal with the optional when saving to the database?
So, would I do something like this:
public int Save()
{
int personId;
personId = DatabaseComponent.InsertPerson(FirstName, LastName, DateOfBirth);
return personId;
}
Thanks for any help! Some useful URLs on good class design would also be appreciated.
First, I’d put two distinct public constructor to Person:
this allows you to write both
and
I can’t see why you should limit to only one form.
As for the DatabaseComponent I’d strongly suggest to write a method that allows you to save a Person instead of the signature you are implicitly declaring.
That’s because, should one day change the way a Person is defined, you’d probably have to change the code in each point you invoke
Save()method. By saving just a Person, you only have to change theSave()implementation.Don’t you plan to use an ORM by the way?