2015-08-23 28 views
2

我有一个可用于单台PC的WPF应用程序。我已经使用SQL服务器数据库,实体框架与数据库 和应用程序中的RDLC报告进行通信。现在需求已经到了,使得这个应用程序可以在多个用户(通常在25个左右)访问应用程序的本地公司网络上工作,这取决于角色和权限的设置。我做了这方面的一些[R & d,主要使用的架构这里提到http://www.codeproject.com/Articles/434282/A-N-Tier-Architecture-Sample-with-ASP-NET-MVC-WCF,而这样做之后,我已经提出申请的一纸设计/架构,将看起来像这样将WPF桌面应用程序转移到客户端服务器技术的良好体系结构

的WCF服务运行公司网络内的高端服务器

  1. GPC.Service本身 - 定义协议来连接到服务 和所有其他必要的信息
  2. GPC.Algorithm - 将成为主要的商业逻辑层将 包含的逻辑和将接口连接到客户端调用 数据库层方法
  3. GPC.Persistance - 将有一个像 取实际的数据库交互方法/存储/更新/删除数据库
  4. GPC.Data记录 - 这将包含EDMX架构实体 Framwework
  5. GPC.Entites - 这将包含数据库架构的实体 和addional部分类

**

客户:

客户将基于MVVM模式现在WPF应用程序(可能在将来,我们将需要移动Web应用程序,但不是必需的现在)。应用程序的主要组件是:

  1. 从excel导入:目前所有数据都在Excel文件中。需要将所有数据导入到系统中。
  2. 编辑/更新/删除:一旦数据被导入,让界面对用户 编辑/更新/删除记录
  3. 生成reprots(使用RDLC本)
  4. 用户/角色管理等

共享: 这是包含像代码目前存在的miscelenious一个类库来读取excel文件,处理错误,类别,这将是结合到UI等

数据库上下文:将在每个方法的Persistance图层中的using语句中创建,以确保没有陈旧的信息。

这个架构是否遵循n层架构,它是否灵活?这方面需要做什么改进,请指导我如何改进任何问题。在继续并改变我现有的应用程序之前,我想确保这是一个很好的架构。

回答

0

这是非常有意义的。 (尝试构建它的TDD风格)

为了让您的生活更轻松一些,客户端版本管理员考虑使用ClickOnce安装程序在您的用户计算机上执行最新版本的安装(一旦您将其移动为一个Web应用程序)。

1

看起来好像你在正确的道路上,但是你可能在某些领域工程过度。

我认为在很大程度上EntityFramework为您处理实体,数据和持久层。除非您希望最终将EntityFramework替换为其他一些ORM系统,否则自己实现它们可能会过度。

您正在使用GPC.Services库浏览SOA(面向服务的体系结构)。在这里,您需要了解如何将服务层分解为一个或多个服务于客户端应用程序的atmoic服务。有很多方法可以解决这个问题,并且主要取决于您打算如何使用服务层。看看RESTful服务,它很好地分解了服务层,并将引导您构建整洁的atmoic服务。查看这个Asp.net Web API。

我想你在你的GPC.Alogrithms库中寻找的是一个真正的领域模型。域模型封装了您的所有业务逻辑,并允许您通过公开的函数对对象执行状态更改。考虑到这一点的系统的层将如下所示:

持久性(EF) - >域模型 - >服务层 - > DTO(数据传输对象) - >客户端

的DTO对象上述将会是一组POCO(Plain Old C#对象),它们负责向客户端发送数据和从客户端发送数据。由于反向引用和其他封装问题,序列化和淡化您的域对象将变得有问题,因此您需要这样做。把DTO放在适当的位置将强化一个上下文边界,这是SOA的原则之一 - “Boundarys是明确的”,参见this for more info on soa

对于客户端来说,似乎你正在跟踪。您可能想要做的是重构当前客户端应用程序,以便将所有数据查询合并到一个图层中。所以,当时间到了,你会用服务实现来替换这个层。

相关问题