通常如何构建数据驱动的应用程序
Posted
技术标签:
【中文标题】通常如何构建数据驱动的应用程序【英文标题】:How data driven applications are built generally 【发布时间】:2011-04-15 04:03:49 【问题描述】:我是一名新手 .net 程序员,过去一个月学习 WPF。我从一开始就感到困惑的一件事是如何构建实时数据驱动的应用程序。我从一个基本应用程序开始,我需要将数据绑定到一个大约有 10 列的数据网格。我在所有教程中看到的数据绑定的常见方式是他们有一个示例数据,他们用它来构建一个业务对象(最多两个/三个字段)。但是在处理更大的数据对象时,他们是否为所有 10/15 字段编写 getter/setter?为此,我更喜欢直接将 DataGrid 绑定到 DataTables,这涉及更少的代码。但似乎这种方法可能会错过几个优点,例如在源/集合更改时收到通知等。我不知道实时应用程序构建。如果我能得到这方面的指导会很好。
【问题讨论】:
附带说明,一旦超过了大约 7 列,对于普通人来说,数据变得越来越难以理解。如果您要呈现大量数据,强烈建议您采用某种方式过滤要显示的列。根据数据的性质,也可以将一些列聚合在一起以提供比原始列更容易理解的有意义的摘要信息。对于这些类型的问题,收集用户实际希望如何使用数据并调整 UI 以使其匹配的用例会很有帮助。 【参考方案1】:我没有在 DataGrid 中使用超过 15-20 列的经验,但为此我确实为属性创建了 getter 和 setter。
创建一个使用 INotifyChanged 模板化属性的代码 sn-p 当然也有帮助。 http://drwpf.com/blog/2007/11/17/my-wpf-code-snippets/
这还取决于您从哪里获取对象。在我做的一个项目中,实体来自实体框架,它确实在属性上实现了 INotifyPropertyChanged,所以在这种情况下,我不需要编写包装属性。我可以将实体属性直接绑定到数据网格的列。
【讨论】:
【参考方案2】:开发数据驱动的应用程序没有灵丹妙药。我使用 SOA 风格的应用程序结构编写企业资源规划应用程序以谋生 - 我可以向您保证,我从不直接使用 DataTables :-)。如果您只有一个用户和有限的数据量,那么 IMO 可以使用 DataTables。添加第二个用户后...您应该远离 DataTables(和 DataSets 等)
但要回答您的问题 - 当我有包含具有许多属性的对象的大型数据集时,我倾向于最多显示大约 10 列 - 如果有更多属性,我会将它们放在详细信息部分/单独的详细信息视图中。然后,我将各个列绑定到对象的 10 个(左右)最重要的属性。
我只将 DataGrid(读写表格数据)用于具有相当简单对象的非常小的集合 - 通常是父对象的集合属性。在其他地方,我使用 ListBox 或 ListView 并且只显示数据(只读) - 然后是用于创建/更新单个项目的详细信息部分。这使得处理与数据库(或您拥有的任何数据存储)之间的 CRUD(创建/读取/更新/删除)操作变得更加容易。
从具有多种可能性的 WPF 开始可能会有点不知所措 - 但我建议您在某个时候查看 M-V-VM 以真正利用 WPF 的强大功能(和简单性)。我已经写了一个包含十篇文章的博客系列来说明一种方法——它以here 开头。如果你刚刚开始,它可能会比你的水平略高一点,但是把它留到你无法入睡的那些日子...... :-)
希望这至少能给你一些建议:-)
【讨论】:
嗨地精,谢谢。如果允许的话,我真的可以选择这个作为第二个答案。再次感谢您的想法。 :) 不用担心 - 很高兴它帮助了你 :)【参考方案3】:这些可能会有所帮助:
How do I bind a WPF DataGrid to a variable number of columns?
http://www.codeproject.com/KB/WPF/MovingTowardWpfBinding.aspx
【讨论】:
第一个链接是不同的场景,第二个是绑定的基础。但我想知道 10 多个涉及集合对象的领域是如何在实际应用中构建的。【参考方案4】:通常在大型企业应用程序中,您确实拥有具有 8-10 个属性(字段)的业务对象(BO)。当 DB 中的表变得更大时,进行标准化以减少列数并创建不同的表(通过外键连接);在 Bo 的情况下也是如此,它们的设计(使用各种 OOP 的概念)使得每个 BO 将具有所有相关属性并具有可维护的大小。大 BO 将是这些较小 BO 的组合。这增强了可用性,同时您不必处理具有大量属性的 BO。
【讨论】:
以上是关于通常如何构建数据驱动的应用程序的主要内容,如果未能解决你的问题,请参考以下文章