我们开发的交通主要是低,但高度专业化的网络应用程序。通常我们使用L2S,EF或NHibernate的接入层,然后抛出Asp.Net MVC把它和在正常的CRUD操作我们查询的Isession / DataContext的直接但对于更高级的功能/副作用,我们把它放在一个某种服务层。

现在,我是想通过的OData(WCF数据服务)发布的数据和查询,从控制器(或者甚至是从jQuery的时候一个很好的模板引擎显示出来),并公布通过WCF服务的服务操作(或作为对WCF数据服务的自定义方法?)。有什么优势/劣势做这种架构的姿势?

我有所收获,除了更高的复杂性和延迟?关注更好的分离(或者是它只是一个幻觉)?

修改 它可以是一个好主意,以创建如一个完整的AJAX驱动的解决方案。 WCF RIA服务?或者做一个失去太多的灵活性?像你这样的感觉可以完全从派遣你的逻辑你的意见的话,心里很不舒服,一个人应该能够只写纯HTML,不应该需要甚至是asp.net MVC?但我想有很多的出现的新问题?

有帮助吗?

解决方案

由于TomTom公司提到,你不希望在一个进程中的时候要环回的OData的成本。如果你有直接的线的视线到您的数据库,它是你自己的应用程序的数据库,那么就没有理由把WCF数据服务在中间。我会继续用你提到(L2S,EF,NHibernate的)其他选项之一。

现在,如果你需要在公开数据的HTTP终结其他应用程序占用,甚至为自己的应用程序,如果你有在客户端的一些jQuery代码从服务器需要访问数据,那么绝对是一个OData的端点可以帮助和WCF数据服务是创建一个最简单的方法。

其他提示

不这样做。很抱歉,但是这是一个愚蠢的过度设计方法。你是在一个过程中,你坚持上运行的网络连接,以及所有通过数据编码成XML并退了出去,再加上有限的查询语义HTTP连接运行呢?不要告诉任何人你甚至尝试。

关注的分离是一种假象这里 - 你的简化数据层替换了高度优化域模型

这是说:我爱的OData - 伟大的。但它不是一个程序的技术,它是一个前端技术,如ASP.NET MVC - 只是不适合最终用户,但对于其他程序集成到您的数据。它应在类似情况下使用,并且暴露在信任边界数据时(Silverlight的 - 例如 - 是一个信任边界作为请求可以伪造)

有没有被优化在像NHibernate的过程高端应用运行时层来代替。

TomTom公司有不少选票,尽管他没有错,他也是不正确的,尽管他的说服力音。

在这个特别的情况下,OP似乎是开发一个内部网LOB风格的应用程序,可能仅代表通过OData服务模仿的基础数据库,但什么可以阻碍,如果他没有模仿的基础数据库?

如果他是基于不同的或未知的未来的数据源建立一个应用程序,然后在服务层能够统一,重新目前,简化和聚集这些服务,即便查询的相当大的比例,最终回到一个SQL Server中的下一个室。

同样,如果您正在构建大规模的应用,并通过规模我的意思是数以百万计的用户期待等行为之间的几秒钟,而不是数以百万计的外汇交易一小时,然后将您的应用程序之间的服务层数据是一种常见的图案。互联网的可扩展性是基于许多小无国籍HTTP服务器和在之间的高速缓存架构。

在现实生活中,同样的查询运行无数次,人刷新页面或者一遍又一遍地点击相同的链接。没有人真的会要求10米行,因为没有多少人可以看看它一气呵成。所以在小页的工作保持数据流和请求交织。你也有机会介绍在服务层,甚至RAM数据库RAM缓存共享。

您甚至会发现你需要分片数据库或SQL和键/值存储之间分配它。然后你可以在中间层的加入,向外扩展,并从数据库服务器卸载连接和计算密集型的东西了。

与网络规模的规则是数据库是您的热点,你需要做的一切,你可以阻止任何人说话吧!在一台iPad,当地HTTP缓存,在你的互联网服务供应商的代理,在IIS输出缓存,或在Redis的缓存中,所有这些层有助于分散负载,减轻负担。

所以,如果卡尔来采访我,告诉我他认为把一个OData的层之前,他的SQL盒,我很想听听他的推理。

WCF数据服务和支持的OData JSON,这样就可以通过利用最小化的有效负载。此外,利用WCF数据服务,你可以完全控制你的数据访问。你不必滚实体框架。你可以定制一切。好处是,该协议结构是通过使用WCF Data Services和OData的彻底处理。和消费MVC中的服务是一种添加服务引用了。 WCF数据服务WCF上运行,所以你必须做其他Web服务不仅仅是OData的类型交货的能力,所以它是非常灵活的。

有这里有局限性,有附带的OData的性质以及WCF数据服务OData的处理方式,但他们是相当具体,如果在你的架构出现,他们有他们周围的方式。

如果您的溶液中分离到单个web应用程序,则具有嵌入在应用程序中的数据层效果很好。但是,如果您有任何需要任何有另一个应用程序或进程击中数据层或共享业务逻辑,然后探索把你的数据层在WCF数据服务的选择是值得的。例如,你可以写一个PowerShell脚本调用Web服务方法在两行代码。所以,如果你有域的逻辑,你希望能够从您的Web应用程序,并在命令行中运行或计划任务,然后你的WCF数据服务层可以办理所有的场景,而无需重复的逻辑或代码。

很多方法对皮肤一只猫。我已经使用在商业应用中这两种方法并不会说一个或另一个应该避免。它们都工作良好,并提供充足的值而不损害。

要公正地说,有这种方法,可能大于性能问题,这是公认的巨大的利益。应用程序构建这种方式将有几个数量级的等待时间和费用可能几倍在计算资源比一个进程内溶液中执行。

话虽如此,在开发方案,其中人力资源是有限的,这可以更好地工作。它允许承包商迅速聘请了在任何语言适合他们非常快地把新的屏幕或整个新的应用程序。开发人员可以起床到速度快于专有的自产自销解决方案。在配置文件中没有更多的SA密码,注入如果需要自定义的安全层,统一日志记录和审核,有几个数据存储组合成一个一致的资源。如果你有一个异构平台,你不需要写的SDK,他们已经写在许多重要的语言。 OData的工作非常好,MS Excel中,这是在许多组织中一个巨大的胜利。根据您的网络拓扑结构,它可能是更便宜,更快速路由出在互联网上使用比租用线路,如果你是在远程办公室,或在防火墙后面(在客户现场做演示,例如)

有关大的数据集,该请求和包装的开销变得不那么重要。对于报告的情况下,例如。虽然我从来没有设计这样的事情,我能看到它可能是有用的,这取决于你的企业文化和可用资源,以使用OData端点内部。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top