using System; // // Domain Model + Active Record // public abstract class ActiveRecord { int _id; public int ID { get { return _id; } } // ... métodos auxiliares de acesso a dados public abstract int Save(); } public class Address { string addr1; string addr2; string local; string postal; } public class Entity : ActiveRecord { protected abstract object CreateObject(DataRow r); protected Entity(DataRow r); string name; string nif; Address addr; string email; string telefone; public static IList GetByName(string namePattern); public static IList GetByAddress(string addrPattern); public static IList GetByNIF(string nifPattern); public static IList GetByID(int id); } public class Person : Entity { protected override object CreateObject(DataRow r); protected Person(DataRow r); DateTime dateOfBirth; public int Age { get {} } public override int Save(); public static IList GetForecomeBirthdays(int nDaysToCome); public static IList GetByBirthDate(int? year, int? month, int? day); } public class Organization : Entity { protected override object CreateObject(DataRow r); protected Organization(DataRow r); public override int Save(); }