ASP.Net MVC和N-Tier

4

你好,

我很抱歉没有充分研究这个问题以自己回答,但我想这会花费我一些时间,而我宁愿现在知道,在学习更多之前。我在我的初步研究中找不到任何东西。

如果您已经使用了多层架构(数据层,逻辑层,表示层),为什么要使用ASP.Net MVC?除了控制器比逻辑层更强大之外,还有其他原因吗?

我是否正确地认为我可以在MVC的模型部分中使用nHibernate以及所有我的数据访问类、实体和映射?

在使用控制器时,将大量逻辑分离到单独的类中,这样我就可以从多个控制器中调用它们是最好的选择吗?或者我可以从控制器本身调用它们,考虑到我不希望它们全部成为操作,只是普通方法。

谢谢。

5个回答

8

MVC不是要取代N-Tier,而是一种组织表现层的方式。

我不会说控制器比逻辑层更强大,相反,控制器(作为表现层的一部分)应该仍然调用逻辑层。

控制器只应为视图准备数据并处理视图中的操作。您仍然应该使用业务逻辑层(BLL)。


3

是的,NHibernate实体可以(也应该)传递到视图中。

这会给你带来一些麻烦。你应该使用扁平化、空安全的DTO,也就是视图模型。


我的错误,我指的是POCO实体(作为数据载体),而不是NHibernate实体。 - gius
嗯,NHibernate 实体应该是 POCOs,并且也可以是 POCOs。 - Anthony
但是你可以使用它们来从视图中编辑数据库(保存、删除等),这并不好。- 或者所提到的问题还存在其他地方吗? - gius
目前的问题主要是与空安全有关,并且偶尔会出现ORM相关的问题,比如SELECT N+1。还有其他方面的问题,涉及到安全性、测试和数据完整性,这些问题导致一些架构师避免使用领域模型作为MVC中的M,而改用视图模型。 - Matt Hinze

2

1

N-tier是一种架构模式,旨在实现应用程序关键领域的重用、关注点分离和可扩展性。非UI层(业务、数据、Facade等)应进行单元测试并且与UI无关。

UI层只是这些层之一,无论是Silverlight、ASP.NET MVC、Web Forms等。

MVC,像MVP一样,是一种设计模式,可以更好地测试UI层。ASP.Net MVC是一个开箱即用的框架,支持和强制执行此模式。该模式在此框架之前就已经存在并得到了广泛使用。

但这只是UI层的选择,控制器中不应与数据库、服务等进行交互,它们使用模型来控制视图的状态,不应控制业务逻辑、持久性、事务等。


0
回答你的问题,为什么在已经使用多层架构的情况下还要使用if语句,原因是它可以生成更有组织和搜索引擎友好的URL。此外,在ASP.Net中,它更符合标准模式,而其他模式则不太一致。这使得对于那些已经在其他平台上使用MVC的开发人员来说更加友好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接