WPF MVVM循序渐进

简单的三层架构示例和 GLUE代码问题
第一步:最简单的 MVVM 示例 - 把后台代码移到类中
第二步:添加绑定 - 消灭后台代码
第三步:添加执行动作和“INotifyPropertyChanged”接口
第四步:在 ViewModel 中解耦执行动作
第五步:利用 PRISM
WPF MVVM 的视频演示
从我们还是儿童到学习成长为成年人,生命一直都在演变。 对于软件架构, 同样适用这个道理, 从一个基础的架构开始, 随着每个需求和情境在不断演化。
如果你问任何一个 .NET 开发者, 什么是最小的基础架构, 首先浮现的就是"三层架构"。 在这个框架中, 我们把项目分为三个逻辑层次: UI 层, 业务逻辑层和数据访问层, 每一层都负责各自对应的功能。

UI 负责显示功能, 业务逻辑层负责校验, 数据访问层负责 SQL 语句。3层架构有如下的好处:
包容变化: 每一层的变化不会重复跨越到其它层次。
重用性: 增强可重用性, 因为每一层都是分离, 自包容的独立实体MVVM 是三层架构的一个演化。我知道我的经历不够证明这点, 但是我个人对 MVVM 进行了演化和观察。 那我们先从三层基础架构开始, 去理解三层架构存在的问题, 看 MVVM 架构是如何解决这些问题, 然后升级到去创建一个自定义的 MVVM 框架代码。 下面是本文接下来的路线图。

简单的三层架构示例和 GLUE(胶水) 代码问题
首先, 让我们来理解三层架构以及它存在的问题, 然后看 MVVM 如何解决这个问题。
直觉和现实是两种不同的事物。 当你看到三层架构的图, 你首先的直觉是每个功能可能都分布在各自层次。 但是当你实际编写代码时, 有些层次被强迫去做一些它们不应该做的额外的工作(破坏了SOLID 原则)。 如果你对 SOLID 原则还不熟悉可以参考这个视频: SOLID principle video(译者注: SOLID 指 Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion, 即单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)。

这部分额外工作就在 UI 与Model之间, 以及 Model 与 Data access 之间。 我们把这类代码称为"GLUE"(胶水, 译者注:由于作者全用大写字母表示, 因此后续延用 GLUE)代码。"GLUE"代码主要有两种逻辑类型。
鄙人浅见薄识, 如果你有更多的"GLUE"类型实例, 请在留言中指出。映射逻辑(绑定逻辑): 每一层通过属性、方法和集合和其它层链接。例如, 一个在 UI 层中名为“txtCustomerName”的 Textbox 控件,将其映射到 customer 类的"CustomerName"属性。
txtCustomerName.text = custobj.CustomerName; // 映射代码
现在谁应该拥有上述绑定逻辑代码,UI 还是 Mo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# WPF MVVM 是一种常用的框架,用于开发 Windows 桌面应用程序。进销存是一种常见的管理系统,用于管理企业的进货、销售、库存等业务。下面是一个简单的 C# WPF MVVM 进销存的实现示例: 1. 数据库设计 首先需要设计数据库,包括商品表、进货表、销售表、库存表等。可以使用 MSSqlserver 数据库。 2. MVVM 模式 使用 MVVM 模式可以将业务逻辑与界面分离,提高代码的可维护性和可测试性。MVVM 模式包括 Model、View 和 ViewModel 三个部分。 3. Model Model 层负责数据的读取和存储,可以使用 Entity Framework 或者 NHibernate 等 ORM 框架。例如,可以定义一个 Product 类表示商品,包括商品编号、商品名称、商品单价等属性。 4. View View 层负责界面的显示和用户交互,可以使用 XAML 语言定义界面。例如,可以定义一个商品列表界面,包括商品编号、商品名称、商品单价等列。 5. ViewModel ViewModel 层负责将 Model 层的数据绑定到 View 层的界面上,并处理用户交互事件。例如,可以定义一个 ProductViewModel 类表示商品列表界面的 ViewModel,包括商品列表、添加商品、删除商品等方法。 6. 插件式开发 使用插件式开发可以将业务模块分离,提高多人协作开发效率。可以使用 MEF(Managed Extensibility Framework)框架实现插件式开发。 7. 使用 DevExpress 插件 DevExpress 是一个常用的 UI 控件库,可以提高开发效率和用户体验。可以使用 DevExpress 的 Grid 控件实现商品列表界面,包括排序、筛选、分页等功能。 8. 使用 NLog 记录日志 NLog 是一个常用的日志记录框架,可以记录应用程序的运行日志,方便排查问题。 9. 相关问题:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值