【问题标题】:NTier design advice using WCF Service使用 WCF 服务的 NTier 设计建议
【发布时间】:2014-05-24 15:38:25
【问题描述】:

我正在使用 WCF、实体框架和 POCO 的类为服务器层构建一个 N 层应用程序,而对于客户端,我正在使用带有 MVVM 模式的 WPF。 服务器端代码我分为4个项目:

* Data Layer(DAL -> EF)
* Model Layer (POCO's classes)
* Business Layer (BAL)
* Service Layer (WCF)

为了在所有服务器层和 wcf 客户端之间进行通信,我在模型上定义了一个接口,我在每个层上都实现了该接口。 我将自己编写所有代码,从 DAL 到表示层,因此关注点分离是可取的,但不是必需的。

所以我的问题:

1) 作为所有代码的编写者,这种设计是否有意义?

2) 为了简单起见,我应该减少项目数量吗?

3) 在每一层上实现一个接口是个好主意吗?因为我发现自己必须为每种新方法编写非常相似的代码 3 次。像这样的:

关于 WCF 服务:

public IEnumerable<Clientes> GetClients()
    {
        BusinessLayer.Ohmio _cli = new BusinessLayer.Ohmio();
        return _cli.GetClients();
    }

商务:

public IEnumerable<Clientes> GetClients()
    {
        DataLayer.Ohmio bn = new DataLayer.Ohmio();
        return bn.GetClients();
    }

关于数据:

public IEnumerable<Clientes> GetClients()
    {
        using (var context = new OhmioEntities())
        {
            var _clients= context.Clientes.ToList();                
            return _clients;
        }
    }

接口方法还有两个问题:

1) 我使用相同的接口来通信服务器端层和 wcf 客户端,因此数据类型需要相同。

2) 对于一个复杂的应用程序(比如我正在构建的应用程序),接口和所有实现的类都将是巨大的!因为他们需要我项目中所有对象的所有方法!

这种情况有更好的解决方案吗?任何建议将被认真考虑!!!!谢谢!

【问题讨论】:

  • 你所有的层都没有增加任何价值,它们没有任何事情。只实现一次的接口也几乎没用。把时间花在其他地方,而不是增加人为的复杂性。
  • 这就是我的观点。在某些情况下,BusinessLayer 将向数据添加转换。但在大多数情况下,信息从一层流到另一层而没有变化。但这被认为是超过 n 层设计的想法:将数据库逻辑与业务等分离。也许这种设计只有在很多人从事此类项目时才有意义。我在这里尝试遵循良好的编程模式。
  • 太多层会杀死你的应用程序。小心。 +1 @usr
  • 这个问题更适合codereview

标签: c# wcf entity-framework n-tier-architecture


【解决方案1】:

接口和抽象为依赖注入(控制反转)奠定了基础,允许独立测试组件和层。像您建议的那样具有单独的层有助于分离关注点,从而降低复杂性并提高可测试性、可维护性等。

对于小型和简单的应用程序而言,这种努力可能不值得。但是,应用程序越大、越复杂,考虑最佳实践、设计原则和模式就越重要。

为了避免设置所有层的解决方案并编写所有样板代码,您可能有兴趣尝试完美匹配的开源框架 N-Tier Entity Framework你描述的场景。在任何情况下,您都应该查看其documentation,其中包含有关架构考虑的专用部分,可帮助您设计此类解决方案。

【讨论】:

  • 谢谢。我看看!
猜你喜欢
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多