Во-первых, я бы назначил два отдельных публичных конструктора для Person:
namespace BusinessLayer
{
class Person
{
public Person(string firstName, string lastName): this(firstName, lastName, DateTime.Now)
{}
public Person(string firstName, string lastName, DateTime birthDate)
{
FirstName = firstName;
LastName = lastName;
DateOfBirth = birthDate;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
}
это позволяет писать как
var p = new Person("Marilyin", "Manson");
var p2 = new Person("Alice", "Cooper", new DateTime(...));
и
var p = new Person { FirstName="Marilyn", LastName="Manson" };
Я не понимаю, почему вы должны ограничиться только одной формой.
Что касается DatabaseComponent, я настоятельно рекомендую написать метод, который позволит вам сохранить Person вместо подписи, которую вы неявно объявляете.
Это потому, что если однажды изменит способ определения Person, вам, вероятно, придется менять код в каждой точке, в которой вы вызываете метод Save()
. Сохраняя только человека, вам нужно всего лишь изменить реализацию Save()
.
Кстати, вы не планируете использовать ORM?