说到层和层,请保持简单。一些开发人员在业务层面上非常学术,但他们所做的只是增加了不必要的复杂性(请注意architecture astronauts)。所以我的第一个建议是保持简单和容易维护您的特定应用程序。
目标是在维护复杂性和灵活性之间取得平衡。您希望您的应用具有增长灵活性,而无需进行大量更改,但同时您希望能够获得易于理解的应用。
在持久性和客户端之间至少有一层是一件好事。这使您可以灵活地在客户端和数据库之间放置域和/或服务。除非你正在解决一个特定的问题,否则我不会超越这个范围。
至于从您的持久性加载,您可以使用部分类来扩展生成的持久性类。这是添加附加功能的简单方法,同时保持原始属性和方法的完整性。
如果您需要将持久性对象转换为应用程序使用的域对象,我建议将构造函数或静态创建方法放在持有对象的域对象上,然后将其转换为域对象。你可以做同样的事情回去持久。
using MyApp.Domain;
public class Customer
{
public string Name { get; set; }
public string Address { get; set; }
public int ID { get; set; }
public static MyApp.Domain.Customer Create(MyApp.Persistence.Customer pcustomer)
{
return new MyApp.Domain.Customer
{
Name = pcustomer.Name,
Address = pcustomer.Address,
ID = pcustomer.ID
}
}
public void Persist(MyApp.Persistence.Customer pcustomer)
{
pcustomer.ID = this.ID;
pcustomer.Name = this.Name;
pcustomer.Address = this.Address;
}
}
以下是部分类的样子。关键是让类的名称空间与生成的持久性类型的名称空间相同。
using MyApp.Persistence;
public partial class Customer
{
public string FormatedAddress
{
// I now have access to all the generated members because
// I'm extending the definition of the generated class
get
{
return string.Format("{0}\n{1},{2} {3}",
StreetAddress,
City,
State,
ZipCode);
}
}
}