3层nhibernate + wcf + Silverlight

Ale*_*ndr 5 architecture nhibernate silverlight wcf n-tier-architecture

最近我被要求开发一个项目.架构看起来像:

  • 1层:基于Nhibernate的DataAccess
  • 2层:基于WCF服务和一些核心类的业务层
  • 3层:基于Silverlight的视图

我将使用DTO对象在第2层和第3层之间传递数据.

我已经意识到该项目将拥有庞大的域模型,许多业务实体应该支持标准和自定义CRUD操作.在第一层,它将通过通用的NHibernate存储库+规范来解决.

但是第二层(一个WCF服务)看起来像一组方法,它们为第三层提供DTO的自定义和标准CRUD接口.

例如,模型看起来像:

class Product {}
class Category {}
Run Code Online (Sandbox Code Playgroud)

DTO的:

class ProductDTO {}
class CategoryDTO {}
Run Code Online (Sandbox Code Playgroud)

"问题"WCF服务:

public class DataService
{
  public List<CategoryDTO> GetAllCategories()
  {
  }

  public List<ProductDTO> GetAllProducts()
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

解决方案:

public class ProductDataService
{
  public List<ProductDTO> GetAllProducts()
  {
  }
}

 public class CategoryDataService
{
  public List<CategoryDTO> GetAllCategories()
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 上面列出的解决方案有什么好的替代方案吗?
  2. 在这种情况下,是否有任何可以在WCF服务中使用的"通用"方式?

ole*_*sii 3

对于上面列出的解决方案有什么好的替代方案吗?

是的,您可以使用 RESTfull 服务。我还建议不要使用胖接口(mathieu 解决方案)。胖接口很难维护、重构,而且体积庞大且笨重。如果您选择 REST,您可以拥有这样的 API(与 WCF 中的接口类似):

对于这种情况,WCF 服务中是否可以使用任何“通用”方法?

是的,您可以在服务器上使用泛型,但对于客户端来说,这将显示为具体类型。请参阅这篇文章的示例。