Mik*_*ike 7 wpf mvvm linq-to-sql
我的目标是拥有一个使用WPF的应用程序,它是一个3层架构.UI,BLL和DAL ...我想使用MVVM,但我不确定它如何与3层架构一起工作,或者它是否完全不同.所以考虑到这一点,我有几个问题:
1)LINQtoSQL:我在线阅读了很多内容,说LINQ取代了你的DAL,看过很多文章说这个坏主意.我认为这是一个坏主意,但是,我在这里放什么?我将返回BLL的数据类型是什么?IQueryable的?的ObservableCollection?我没有线索.
2)BLL:我想使这个服务在服务器上运行,这样当我需要进行更改时,我不需要重新部署整个应用程序,我只需要重新启动服务.但是,我不知道从哪里开始.
3)使用BLL,我想我对数据如何通过DAL从一直到接口的所有层感到困惑.
我已经在线完成了大量的研究,并且有很多东西,但是我没有看到有人谈论过使用SQLMetal和在服务器上运行的BLL在DAL中使用带有LINQ的MVVM的WPF应用程序.谁能指出我正确的方向?或者可能是一本书?
麦克风,
你的问题真的很酷,我喜欢。首先,请随意尝试一下 - 每个项目都是不同的,因此不存在放之四海而皆准的单一规则。这就是为什么我建议将 DAL 留给 LINQ 2 SQL。这个很棒的工具可以处理它,您不必担心。其次 - 您提到了 3 层架构,但为什么没有模型的位置?由于所有模型都是自动生成的(例如 SQLMetal),因此您也不必担心映射。所以,如果你还不觉得无聊,让我回答你的所有 3 个问题:
跳过 DAL 并仔细观察您的项目 - 如果您感觉它缺少这一层 - 添加它(它将包含 LINQ2SQL 查询)。第二部分 - 您可以返回任何您想要的内容,但使用模型参数化的 IEnumerable<> 或 IQueryable<> 对您来说将是最方便的。
我的直觉告诉我,您将需要 WCF - 在这种情况下,您应该能够将整个(是的,确实如此)整个业务逻辑包装在一个好的契约中,并按照您的意愿实现。
这是最简单的一个:)由于您的 BLL 层实际上是某个契约(接口)的实现,因此您可以设计该接口来为您提供所需的所有数据。例如:
合约/接口:
IEnumerable<User> GetTallUsersOver40();
IEnumerable<User> GetShortUsersOver60();
...
Run Code Online (Sandbox Code Playgroud)
您所说的“所有层”都缩小为单个 LINQ2SQL 查询执行。如果您需要更多逻辑 - 将其放在这一层中。
我想使用 MVVM,现在怎么办?答案比您想象的更简单 - 只需准备您的视图和视图模型并简单地使用您的 BLL 合约/接口实现。
如果还有疑问请追问!