需要确认我对VB.net中的模块与类的思考

时间:2010-08-12 14:42:36

标签: vb.net class module

我正在与一家承包商合作开展一个项目,我们聘请他们做一些VB.Net编程。我曾经为这个项目编程,但最近我成为了项目经理,所以我可以解决其他问题。他的编程方法与我在学校教授的方法有很大不同。他使用类的唯一时间基本上是一种数据集(不是实际的数据集,因为我学会了如何在学校使用)。例如,有一个cEmployee类,他在那里为Employee创建一个类,并且他定义了一个员工拥有的所有字段。

所有功能都放在模块中。因此,如果他有几个函数来填充组合框,它们都会进入组合框模块。我对此的理解是,当程序运行时,模块被视为全局函数,并且无论它们是否实际用于表单,都包括在内。对我来说,这听起来会增加运行这样一个程序的资源需求,因为每个表单都必须包含大量的模块代码。

我学习的方法是将具有特定用途的函数放在名称空间和类中,然后在需要时导入适当的名称空间和类。然后只加载运行表单所需的代码,并且在表单上导入之前不会加载不需要的函数的额外代码。我自己从未使用过模块,但我可以看到它们的实用性,我认为他在这种情况下严重误用了模块。我是对的吗?

4 个答案:

答案 0 :(得分:1)

VB模块基本上定义了“全局”函数 - 如果这是C#,它将是一个带静态函数的静态类。但是,这不会对应用程序的资源需求产生任何影响:所有方法都定义一次,无论它们在何处被调用,并且在模块或类中都不会改变它。如果您有20个表单都使用组合框代码,则组合框代码仍然只存在一次 - 它在应用程序或内存中不会重复20次。

听起来你的承包商可能会有一些不寻常的编码风格,如果他使用了很多模块代码,但没有更具体的例子,很难说肯定。

答案 1 :(得分:1)

根据您对情况的描述,您的程序员似乎具有VB6背景并且尚未完全迁移到VB.NET;如果他可以避免,他不会使用OOP。

为了回答你的问题,他的代码风格将成为一个纯粹的VB.NET OOP程序员的地狱。但是,它不会带来太多开销。

答案 2 :(得分:1)

如果没有看到代码,很难回答。从您问题中的信息来看,您的承包商似乎正在编写程序化的结构化代码,这是过时的,但不是必然一个巨大的问题,尽管许多习惯于OO的程序员不会喜欢看在代码。

来自your last comment on Dan's answer听起来他正在为每个功能区域编写一个模块,其中的例程可以作用于任何对象。例程接受ObjectVariant参数,检测使用case / if语句传递的对象类型,然后分支到该对象的相应代码。是对的吗?这是非常古怪和难以维持的。通常,更好的方法是为功能区域声明接口,并让类实现接口。

我从自学成才的程序员那里看过这样的代码。为了对他们公平,他们是聪明的人,他们匆匆从头开始发明OO编程!但这可能是一个缓慢的过程,最好先了解其他人的结论!我可能会推荐一门关于面向对象编程的课程,或者如果他是一本读者,如Head First Design Patterns甚至Code Complete 2这本书,它有一些很好的设计章节。如果你能让他迷上Code Complete,would be a good thing

答案 3 :(得分:0)

通过传统的OOP方法,我们在学校学到了类方法绑定到它们的对象,而模块用于承载全局函数,我猜你的项目合作伙伴想要独立使用这些函数,与关联对象无关。如果这些方法仅在组合框上处理,那么它们必须用专用类封装。

好吧,正如你所说的,同时加载所有功能会增加开销,所以这就是事情的运作方式;因为,执行仅在需要时才处理功能,&不是在执行开始时,所以无论你在代码中包含数百个函数,编译器只有在你调用它时才执行它们(直到那时编译器不知道你在其中写了什么)以及在函数内分配变量。但是,如果变量由所有函数共享,则不是这种情况,因为当它们被所有函数共享时,它们对于它们是全局的,因此,它们将从一开始就位于内存中。