当涉及到层和层时,请保持简单。一些开发人员在业务层方面变得非常学术,但他们所做的只是增加不必要的复杂性(注意architecture astronauts)。所以我的第一个建议是为您的特定应用程序保持简单和易于维护。
我们的目标是在维护复杂性和灵活性之间取得平衡。您希望您的应用能够灵活地扩展,而无需进行大量更改,但同时,您希望能够拥有一个易于理解的应用程序。
在持久性和客户端之间至少有一层是一件好事。这使您可以灵活地将域和/或服务置于客户端和数据库之间。除非您要解决特定问题,否则我不会超出此范围。
至于从你的持久化加载,你可以使用部分类来扩展生成的持久化类。这是一种在保持原始属性和方法完好无损的同时添加其他功能的简单方法。
如果您需要将持久性对象转换为应用程序使用的域对象,我建议将构造函数或静态 Create 方法放在接受持久性对象的域对象上,然后将其转换为域对象。你可以做同样的事情回到持久性。
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 );
}
}
}