在.Net WCF服务框架中公开多个DataObjects/Method的最佳设计策略是什么



我对Microsoft WCF还比较陌生。我有几个问题是关于用于实现一个或多个服务的最佳设计模式/方法,这些服务将满足我的需求。

我有一个现有的DataLayer,我想把它推送到一个或多个WCF服务中。后端数据库是ORACLE(我有一个完整的数据访问层,它与正确版本的ODAC通信)。

当我查看现有的数据层时,我(或多或少)支持多个数据对象(类)。

  • 用户信息
  • 用户活动历史审核
  • 评估
  • 评估工作流程和审查
  • 评估报告

我有几个问题涉及在WCF中实现这一点的最佳方式。

  1. 最好将其作为一个服务还是几个服务(与每个数据类/功能一致的一个服务)来实现?

  2. 最后,我想共享与ORACLE ODAC库通信的底层数据访问层。最好将其嵌入到共享库程序集中吗?

  3. 如果我使用多个服务,将它们全部挂在同一个端点上是否更干净?

设计时使用的最佳策略是什么?

谢谢,JohnB

最好的方法是使用一个服务,即WCF数据服务(OData)这里有一个你可以下载的示例http://code.msdn.microsoft.com/WCF-Data-Service-OData-ebb4214a

通常情况下,您的业务层也将在服务器上实现。在这样的事件中,您将简单地包裹您的业务层。如果您在服务器端没有业务层,请基于相同的概念对服务进行建模。您正在公开一组针对特定使用者(或一组使用者)的功能。您通常会向每个使用者(或一组使用者)提供一个服务。话虽如此,你不希望一个大型的整体服务只满足你所有的潜在需求。将其分解为逻辑区域。

大多数情况下,包装单个数据层对象太小,无法单独包装。例外情况是,如果您只是一般地为每个人提供数据服务(REST和ODATA服务非常常见)。

=============================

  1. 根据消费需求为您的服务建模。每个消费者套装一项服务
  2. 如果您将在不同的二进制文件中跨多个业务层共享数据层,那么数据层应该存在于自己的独立库中并进行共享
  3. 只要一致,服务的端点布局通常并不重要。在一天结束时,您的消费者将简单地复制/粘贴您提供的端点

您是否考虑过使用工厂和存储库模式?像这样的东西。

`public interface IEmployee
{
    // define your model here (properties, for example)
    string FirstName {get; set;}
    string LastName {get; set;}
}
public interface IEmployeeBizFactory
{
    IEmployee CreateEmployee();
}
public class CustomEmployee : IEmployee
{
    // Implementation here
}
public class CustomEmployeeBizFactory : IEmployeeBizFactory
{
    public IEmployee CreateEmployee()
    {
        return new CustomEmployee();
    }
}`

考虑每个数据对象的数据契约

使用数据合约

最新更新