C# Linq到SQL、Web服务、网站-规划一切
我的项目的几个“部分”(exmaple的WinForms应用程序)使用我基于L2SQL编写的DAL。 我想在组合中加入几个Web应用程序,但问题是DAL“提供”的数据比Web应用程序需要的要多得多。更多 如果我将网站所需的数据打包到一个web服务中,而不是直接连接到DAL的网站,它将通过web服务访问DAL,这样可以吗 我觉得这会增加很多开销,但另一方面,我绝对不喜欢那种知道webapp拥有访问比实际需要多得多数据的“能力”的感觉 如有任何意见,将不胜感激。C# Linq到SQL、Web服务、网站-规划一切,c#,web-services,linq-to-sql,C#,Web Services,Linq To Sql,我的项目的几个“部分”(exmaple的WinForms应用程序)使用我基于L2SQL编写的DAL。 我想在组合中加入几个Web应用程序,但问题是DAL“提供”的数据比Web应用程序需要的要多得多。更多 如果我将网站所需的数据打包到一个web服务中,而不是直接连接到DAL的网站,它将通过web服务访问DAL,这样可以吗 我觉得这会增加很多开销,但另一方面,我绝对不喜欢那种知道webapp拥有访问比实际需要多得多数据的“能力”的感觉 如有任何意见,将不胜感激。 非常感谢您的帮助。您可以创建web服
非常感谢您的帮助。您可以创建web服务,也可以添加仅显示应用程序所需数据的层。存储库还有一个额外的好处,那就是它是一个解耦层,可以更容易地对应用程序进行单元测试(通过提供一个模拟存储库)
如果您计划最终创建不同的前端(例如,Web UI和WPF或Silverlight UI),那么Web服务就有很多意义,因为它们提供了一个共同的数据基础来构建,并且可以跨层访问。
< P>如果您的数据访问层将所有数据拉为可查询的,然后,您将能够查询您的DAL,并以更高的精度向下钻取您的db调用 请参阅我使用LINQtoSQL编写的关于存储库和服务层的非常简短的介绍。我的文章是围绕MVC构建的,但存储库和服务层的概念在WebForms、WinForms、Web服务等方面可以很好地使用 同样,这里的关键是让您的存储库或Dal返回一个对象AsQueryable
,这样您就可以等到最后一刻才真正提交请求数据
你的结构会像这样
Domain Layer
Repository Layer (IQueryable)
Service layer for Web App
Website
Service layer for Desktop App
Desktop App
Service layer for Web Services
Web Service
在服务层中,您可以根据开发的应用程序自定义特定调用。这允许在每个应用程序的基础上实现更高的安全性和配置,同时维护一个完整的存储库,在您调出您的ORM(如果您决定需要调出您的ORM)之前,不需要修改该存储库。在这种情况下,拥有比您需要的更多的存储库本身并没有什么错。整个.NET4客户端配置文件包含超过50MB的程序集、类等。在我的整个职业生涯中,我可能会使用其中的5%。这并不意味着如果我需要的话,我不喜欢所有的东西
如果您计划向不应该访问部分数据的开发人员提供DAL,请编写一个包装器或派生一个新的DAL。除非您确信自己能够承担费用,否则我会避开服务路线。听起来您走的方向是对的。如果许多应用程序要使用这些数据,您可以通过使用DTO服务获得一些优势
我部分不同意。如果@Isaac说“数据”远远超过了web服务所需要的。。。那么,当大部分信息都无用时,他不想查询那么多信息是对的。是的.NET框架很大,并且比一般应用程序所需的要多得多。。。但你并不是在每次API调用中都轮询整个50MB的文件,就像你在访问数据库一样。这取决于他所说的“需要的数据太多”的意思。如果预测包含太多数据,那么是的,他会想导出一个新的DAL。如果有不必要的查询,那么在那里进行查询将不会花费任何成本,除非库将由不应该访问无关数据的开发人员使用。是的,非常正确。不必要的查询既不在这里也不在那里。附加数据可能会对性能造成巨大影响。。。取决于当前DAL的结构。我完全同意这一点,但是“repository”链接根本不涉及使您的回购可查询。可查询存储库允许您更好地从多个应用程序构造db调用,而无需重写现有内容。(当然,前提是您愿意对应用程序中的现有db调用进行初始重写)。这就是为什么存储库层与服务层配合得很好。。。为不同的应用程序提供不同的服务。@rock:返回
IQueryable
对象的决定将取决于您希望消费者拥有多少控制权。通常,IQueryable
对象将可以访问Linq到SQL对象树中的其他链接对象,并允许对它们执行其他Linq查询。虽然这样通常可以创建一个更薄、功能更强大的存储库层(延迟加载很好),但出于控制和安全原因,这样做并不总是理想的。有时,您只需要一个列表或单个实体对象。是的,这是非常正确的,但是您不能在服务层添加安全性和控制吗?@rock:并不是所有的应用程序都有服务层。但是,是的,可以在那里完成。