带有WPF的MVVM,在DAL中使用LINQtoSQL和BLL
我的目标是有一个使用WPF的应用程序,并且是一个3层体系结构。 UI,BLL和DAL ...我想使用MVVM,但我不确定这是如何与3层架构协同工作的,或者它是完全不同的。 所以考虑到这一点,我有几个问题:
1)LINQtoSQL:我在网上阅读了大量的文章,说LINQ替代了你的DAL,并看到很多文章说这是一个坏主意。 我认为这是一个坏主意,但是,我在这里放什么? 什么是我回到BLL的数据类型? IQueryable的? 的ObservableCollection? 我没有任何线索。
2)BLL:我想让这个服务在服务器上运行,这样当我需要更改时,我不需要重新部署整个应用程序,我只需要重新启动服务。 但是,我不确定从哪里开始。
3)对于BLL,我想我很困惑数据是如何通过从DAL到接口的所有层。
我在网上做了大量的研究,并且有许多东西,但是我没有看到任何人谈论过使用SQLMetal和运行在服务器上的BLL在DAL中使用MVVM和LINQ的WPF应用程序。 任何人都可以将我指向正确的方向吗? 或者一本书可以得到?
麦克风,
你的问题真的很酷,我喜欢它。 首先,随意尝试一下 - 每个项目都不同,所以没有一个适用于任何地方的规则。 这就是为什么我会建议将DAL留给LINQ 2 SQL。 这个伟大的工具将会处理它,你不必担心。 其次 - 你提到了3层架构,但为什么模型没有位置? 由于所有模型都是自动生成的(例如SQLMetal),因此您不必担心映射。 所以,如果你还没有无聊,让我回答你所有的3个问题:
跳过DAL并仔细观察你的项目 - 如果你有一种感觉,它缺少这一层 - 添加它(它将包含LINQ2SQL查询)。 第二部分 - 您可以返回任何想要的内容,但使用IEnumerable <>或IQueryable <>参数化您的模型将会非常方便。
我的直觉告诉我,你将需要WCF--在这种情况下,你应该能够把整个业务逻辑(是的,这是真的)包装在一个很好的合同中,然后按照你的意愿实现。
这是最容易的:)因为BLL层实际上是一些合约(接口)的实现,所以您可以设计该接口为您提供所需的所有数据。 例如:
合同/接口:
IEnumerable<User> GetTallUsersOver40();
IEnumerable<User> GetShortUsersOver60();
...
而且你所谈论的“所有层”都缩减为单个LINQ2SQL查询执行。 如果你需要更多的逻辑 - 把它放在这一层。
我想使用MVVM,现在呢? 答案比您想象的要简单 - 只需准备好您的观点并查看模型,并简单地使用您的BLL合同/接口实施。
请询问你是否有进一步的问题!
我会尽量提供一些见解,尽管我不是专家,但我过去已经解决了这些问题。
LINQ to SQL实际上非常擅长它应该做的事 - 它将取代你的DAL。 但是不要将IQueriable向上返回给BLL,因为这样可以(或者至少提示可能性)BLL直接查询数据库。 您应该将数据对象传递给BLL并让它构造一个匹配的业务对象。 还要注意: LINQ本身可以用于任何层(实际上它是C#的最佳特性之一)。 LINQ to SQL是LINQ语句转换为SQL查询的机制。
BLL作为服务是一个自然的选择。 为表示层提供一个向上的界面(这里WCF服务是一个不错的选择)。
BLL根据从DAL收到的数据生成业务对象。 为了提供良好的图层解耦,应该为DAL和BLL对象使用不同的类。 不要在表示层和数据层之间创建依赖关系。
很好的问题。 我不认为有任何一个地方都有答案。 当我们开始一个新项目时,我有非常类似的问题。 MVVM实际上只是一种表现模式,并不关心你列出的所有细节。 Laurent Bugnion有一个很好的框架,可以把所有东西都粘在一起。
LINQ2SQL很酷,但VS08设计人员可能会觉得很麻烦。 看看http://plinqo.com/与CodeSmith一起使用来生成DAL,我认为它甚至可以执行带有合同的BLL。 另一个生成选项是Oleg Sych T4模板我们遇到的LINQ2SQL的一个问题是单数据环境。 如果你不需要模块化,这不是问题。
我同意其他人对数据合同的看法,并且看看Plinqo可以产生什么。 它可以为你节省很多时间。
这些数据通常可以用于对象。 像其他人说的一样,确保你在所有图层之间保持一致,这样你就没有依赖关系。
当你到达MVVM部分时,你会打开一个全新的蠕虫罐。 我不认为MVVM上有很多或任何书籍。 这仍然是一个新的时尚。
链接地址: http://www.djcxy.com/p/44803.html上一篇: MVVM with WPF using LINQtoSQL in a DAL along with a BLL