我必须开发一个连接到企业内部网内数据库的应用程序(Winforms-application)。
因为我想让应用程序保持可扩展性,可维护性和可维护性。灵活我想一想我应该使用哪种架构。 在这方面,我对N-Tier和MVC模式进行了标记。
据我所知,两种模式的主要区别在于MVC具有更多的三角形结构(组件可以相互通信),而3层应用程序具有直接结构,其中每个组件(n)只能将请求转发给组件(n + 1)。
所以我的想法是采用3层方法。如果“表示层,第1层”保存表单,“业务层,第2层”处理第1层和第3层之间的信息和逻辑并且“数据层,第3层”连接到数据库并使用存储过程。
我的问题是:
这听起来像是对你的合理决定吗?因为我读到如果你打算在不同的机器上运行单层,那么N-Tier就会发现,我不打算这样做。 如果你认为我选择了错误的方法,那会是一个更好的主意吗?
提前致谢。
答案 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相关方面的松散耦合。 它们提供了诸如以下的附加条件:
MVC和N-Tiered架构不是两种相反的方法,您需要从中选择其中一种。
根据您的要求,您可以混合和匹配它们以满足您的应用要求。
例如您可以选择具有UI,业务逻辑和数据访问层的整体3层解决方案。在此范围内,您可以选择以MVC样式实现UI层。
更进一步说明,您可以将业务逻辑层作为一组服务,在与数据访问层进行通信以实现持久性的同时公开业务功能。
同时,UI层上的控制器可以访问业务功能的这些业务层服务,并构建模型/ ViewModel以配置视图。
实现可能差别很大,这只是一个例子。
基本上这两个模式可以相互补充,提供更好的解决方案。