我是使用类的新手,并且想学习将它们与表单集成的智能方法。具体来说,当您将数据输入表单时,该表单是否应该与类紧密链接以及如何链接?
让我们用一个简单的例子。约翰是各种卡片的收藏家:棒球卡、口袋妖怪卡片等。他将卡片列表数据库存储在 Excel 工作表中,并使用表单进行管理。有用于输入新卡和修改其收藏状态的表单,也有用于分析他的数据的表单和功能。
所以他可能有一个 clsBaseball、一个 clsPokemon、一个 clsAlbum 和一个 clsSalesRecord。他还有用于输入和修改数据的表格以及其他类型的分析表格,用于比较牌、计算不同球队和时间段的统计数据等。
当约翰点击“新棒球卡”按钮时,他的 frmBaseball 就会弹出。
上述过程中的任何时候都使用了 clsBaseball 吗?我可以看到该类如何用于加载所有数据以服务于奇特的排序或统计例程,但它实际上是在输入阶段使用的,以便表单上的字段对 clsBaseball 的实例有直接影响吗?
这取决于您的要求有多严格。如果您只是制作原型,那么将代码紧密绑定到表单就可以了。然而,如果您想构建一个更灵活、更健壮和可扩展的应用程序,那么在类中建模您的数据结构,将您的功能封装在对象中是正确的方法。
类使您能够对现实世界的事物进行建模,并且它们有助于在逻辑上分离的分层体系结构中实现它们。在您的情况下,您的表单提供表示层,您的类提供应用程序层,您的 Excel 工作表提供数据层(通常是数据库) - 这是 3 层。
因此,在您的示例中,我将像您所做的那样在类中对数据进行建模,但是如果我需要需要所有 clsBaseball 对象的功能,我将为每个对象管理类。这些管理类包含 clsBaseball 对象的集合,并允许您实现需要对象集合的行为。例如,您可以在 clsBaseball 中实现 update 方法,但可以在 clsBaseballs 管理类中实现CalculateStats,您还可以通过迭代(管理类)clsBaseballs 中的 clsBaseball 集合来调用所有 clsBaseball 对象的更新方法。
回答你的问题:
上述过程中的任何时候都使用了 clsBaseball 吗?
1)他输入棒球卡数据: 您可能会实例化 clsBaseball 的实例,但可能还没有
2)他点击更新: 您实例化一个新的 clsBaseball 实例(或使用现有实例),传递用户输入的值并调用 clsBaseball 的 update 方法。通过这种方式,您可以封装 clsBaseball 行为。
3)表单已验证: 这将在 clsBaseball 更新数据存储之前发生。因此,您可能会在 clsBaseball 中有一个验证方法,该方法会在更新任何数据之前调用。任何错误都可以传递回表示层(您的表单)。或者您可以只在表单中进行验证(尽管在表示层中包含任何业务逻辑是不受欢迎的,因为您可能想将表示层切换为其他内容,请参阅MVC/MVP 模式)。
4)数据保存到工作表上: 这是由 clsBaseball 通过 update 方法完成的。
至于您喜欢的排序或统计例程,您可以从管理类中获取这些数据,因为它们包含对象的集合,因此可以完美地设置为分析所有 clsBaseball 实例。所有这些功能都被很好地封装,没有重复(DRY),任何刚接触代码的人都能够弄清楚发生了什么。
我不久前回答了一个关于如何在 MS Access 中构造数据的问题,答案包括类和管理类的示例:MS ACCESS 2003 触发器(查询事件)和 Excel 导入