【发布时间】: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