我应该选择N-Tier架构而不是MVC吗?

时间:2012-07-05 12:27:32

标签: .net winforms design-patterns architecture

我必须开发一个连接到企业内部网内数据库的应用程序(Winforms-application)。

因为我想让应用程序保持可扩展性,可维护性和可维护性。灵活我想一想我应该使用哪种架构。 在这方面,我对N-Tier和MVC模式进行了标记。

据我所知,两种模式的主要区别在于MVC具有更多的三角形结构(组件可以相互通信),而3层应用程序具有直接结构,其中每个组件(n)只能将请求转发给组件(n + 1)。

所以我的想法是采用3层方法。如果“表示层,第1层”保存表单,“业务层,第2层”处理第1层和第3层之间的信息和逻辑并且“数据层,第3层”连接到数据库并使用存储过程。

我的问题是:

这听起来像是对你的合理决定吗?因为我读到如果你打算在不同的机器上运行单层,那么N-Tier就会发现,我不打算这样做。 如果你认为我选择了错误的方法,那会是一个更好的主意吗?

提前致谢。

2 个答案:

答案 0 :(得分:5)

MVC和n-tier是两个涵盖不同方面的不同层次的架构模式。它们可以同时使用。它不是一个或另一个。

MVC更像是一种可以在表示层中应用的软件体系结构,其中一个组件是Windows Forms。 (Windows Forms是否完全兼容MVC是一个单独的讨论。)

N层架构是一种系统架构(在比MVC架构更高的层次上)。决定基本上是你有两层(Windows Forms客户端作为第一层,数据库,存储过程作为第二层)还是三层(Windows Forms客户端作为第一层,一个带有业务逻辑的应用服务器)作为第二层,以及第三层作为第三层的数据库)。甚至更短:客户端是否会直接连接到数据库,或者中间是否有应用程序服务器?

似乎给出了存储过程的使用。如果是这种情况,那么他们可能提供的不仅仅是数据查询和存储,还有一些业务逻辑。在这种情况下,我倾向于采用两层。

可能相关的其他因素包括:

  • 身份验证:是否可以设置数据库中的所有用户?或者更容易在应用程序服务器上执行并使用单个用户来访问数据库?是否需要某种单点登录?

  • 授权:是否可以检查数据库中的所有权限?如果没有,那么创建安全应用程序需要三层?

  • 是否对禁止直接访问数据库的网络架构有任何限制?

  • 您是否期望有数千名并发用户,并希望通过设置多台服务器来扩展?

一般来说,我倾向于减少层数,因为它更容易实施,成本更低(最初和维护期间)。额外层的成本需要通过依赖于额外层的要求来证明。

答案 1 :(得分:4)


MVC和任何其他MVC相关模式(如MVP,MVVM)是与应用程序的UI层相关联的模式。 (无论是Winforms / Web / WPF还是UI框架都是如此)。

基本上,这些UI模式促进了UI逻辑与UI Presentation相关方面的松散耦合。 它们提供了诸如以下的附加条件:

  • 使用自动单元测试工具使UI逻辑层单元可测试。 (无需启动实际用户界面)
  • 由于UI和UI逻辑组件之间的松散耦合,UI逻辑类变得更加可重用。 (即多个视图可以使用控制器和模型)
  • 还提供一些不常用的其他好处,例如能够通过序列化模型等来保存UI的状态。

MVC和N-Tiered架构不是两种相反的方法,您需要从中选择其中一种。
根据您的要求,您可以混合和匹配它们以满足您的应用要求。

例如您可以选择具有UI,业务逻辑和数据访问层的整体3层解决方案。在此范围内,您可以选择以MVC样式实现UI层。

更进一步说明,您可以将业务逻辑层作为一组服务,在与数据访问层进行通信以实现持久性的同时公开业务功能。 同时,UI层上的控制器可以访问业务功能的这些业务层服务,并构建模型/ ViewModel以配置视图。
实现可能差别很大,这只是一个例子。

基本上这两个模式可以相互补充,提供更好的解决方案。