为了获得一些观点,我们多年来一直在使用ASP.NET Web表单。
我们也意识到MVC相对于Web表单的好处,然而另一个选择是绕过所有这些抽象层,只是从纯.HTML页面转到WCF服务。
没有.ASPX,没有.cshtml / .vbhtml,只是纯.HTML文件,以避免服务器端逻辑和渲染。这是一些人提出的想法,并且变得更具吸引力HTML5及其功能。通过完全控制HTML来定位更多设备的能力也是一个驱动因素。
我知道从技术角度看它是可行的 - 尤其是jQuery使事情变得如此简单 - 但我担心通过抛弃整个服务器端的抽象(Web表单,控制器和视图绑定中的代码隐藏)在MVC中)我们最终会做更多的管道,我们以前不必担心。
问题归结为:
注意:我使用“企业级别”一词来强调这不是一个简单的网页应用程序,其中有几个页面,其中底层架构的最终决定是无关紧要的,我们在这里谈论大屁股应用程序:)< / p>
编辑: 为了更清楚,我们在这种方法中关注的主要领域是:
身份验证和授权 - &gt; MVC以非常直接的方式处理这个属性(例如AuthorizeAttribute),但这种“静态”方法意味着WCF必须处理令牌,加密/解密它们,并决定谁自己做所有事情同时在每次通话中保留所有这些信息。 这是唯一的解决方案吗?
关注点分离 - &gt; MVC显然可以做到这一点,并且我可以添加它。然而,这种方法迫使您在HTML中明确地写入需要WCF函数调用的内容。因此,您的表示层不仅要处理要绘制的内容,还要在其中嵌入要调用以获取其数据的逻辑,以及如何在页面中分发它。这可能不是什么大问题,但相比之下,MVC中的ViewBag为您提供了将WCF服务URL作为动态属性的选项,这意味着逻辑现在是控制器的一部分,而不是您的HTML页面。改变这种逻辑可以免除完全通过HTML页面的麻烦。
绑定&amp;验证 - &gt;我把这两个放在同一个篮子里,因为最终一旦WCF服务响应了一个JSON对象,其中包含我的页面需要运行的所有信息(包括验证规则),有人必须将它绑定到那些空闲控件。
希望这个想法足够清晰,并提前感谢。
答案 0 :(得分:3)
您没有“抛弃整个服务器端抽象”,您正在以与标准Web应用程序不同的方式对功能进行分区。服务器端抽象现在来自WCF服务,该服务向表示层提供数据
您将需要使用Web样式API来返回JSON以使其易于使用 - 我建议使用新的Web API,因为它为您提供了对之前隐藏的HTTP交互的精细控制WCF中的REST实现
显然,走这条路并不是一个灵丹妙药 - 你仍然需要关心往返和延迟(很容易让你的网页界面的复合部分单独调用后端的数据,最终页面渲染速度很慢)。但从架构上来说,没有理由认为这种方法比传统的Web应用程序具有更少的限制。
可能一个缺点是每个页面至少会有两次往返 - 一次是获取HTML + JS而另一种是JS获取数据 - 使用传统的Web应用程序只有一次往返实现与在首页渲染页面时加载服务器端的数据相同
答案 1 :(得分:2)
您可以查看一些更高级的js库,例如KendoUI,它们将为您完成最大的管道工作。您可以享受一些非常酷的功能,ASP.NET开发人员已经习惯于使用服务器端代码,只能使用客户端代码开箱即用。该框架仍在开发中,您可以期待更多很酷的功能。
免责声明:我在Telerik工作,虽然没有直接参与该产品,我们也在内部使用它。我既不是销售团队也不是开发人员 - 我只是认为这正是你所需要的。