我在我的VB.NET程序中有一个Util
模块,它具有项目范围的方法,如日志记录和属性解析。我工作的一般做法似乎是直接调用这些方法,而不用在Util
前加前缀。当我刚接触VB时,花了一段时间才弄清楚这些方法/函数来自哪里。因为我现在使用自己的Util
方法,所以我不禁想到在每个方法调用之前添加Util.
(您立即知道它是用户定义的但不在当前类中,以及在哪里可以找到它),甚至更长。调用VB模块的过程/函数时的一般做法是什么?我们应该用模块名称加前缀吗?在VB.NET中直接调用模块函数是不是很好的做法?
回答
智能感知(和“Goto Definition”)应该使找到事物的位置变得微不足道,但为了清晰阅读,我总是以更好的名称空间开头。那么很明显,这是一个自定义函数,而不是您正在使用的类中内置或本地的东西。
也许我错过了一个微妙的区别,但我倾向于使用共享类而不是模块来处理常见和自包含的任何代码 - 它似乎更容易跟踪我,并且还会执行因为你不能从任何地方调用它而不给它命名空间来调用它。
为了便于阅读,我通常会将共享函数的完整名称空间。
Call MyNameSpace.Utils.MySharedFunction()
Util是一个这样的通用名称。
来自.Net框架的示例。您有System.Web.HttpUtility.UrlEncode(...)
。通常您将其称为HttpUtility.UrlEncode
,因为您在顶部有一个导入声明。
具有静态工具方法的类的名称应该是可读和可解释的。这是很好的做法。如果你有很好的类名,它们也可以驻留在一个Utils命名空间中,但是类名不应该是Utils
。
将所有日志记录在Logger
类中。你所有的字符串都在StringUtils
类中,等等。尽量保持类名尽可能具体,并且我宁愿有更多的功能少于其他类的类。
同意,但这是一个非常小的临时项目,Util类中只有很少的方法,这就是他们希望实现的方法。对于稍大或更长的任何事情,我们肯定会模块化它更多 – froadie 2010-04-29 14:49:03
我仍然会将Utils类重命名为它实际上用于实用程序的类。如果它是两件事,即使它很小,也要带两班。在某个时间点,有人会添加一个函数,并将其粘贴在Utils中,并且它将会增长,增长并增长:)大问题是,如果我们允许自己跳过最佳实践时,它只是一个小小的临时事情?如果代码在一段时间内被删除并且再也没有碰过,我会说是。但今天知道这件事有多容易? – 2010-04-29 14:53:41
- 1. 在onPause()方法中调用GC是不是很好的做法?
- 2. 直接从模型中覆盖fetch()和save()是不是很好的做法?
- 3. 在析构函数中调用函数是一种很好的做法吗?
- 4. 从构造函数中调用方法是否是一种很好的做法?
- 5. 从头开始嵌套函数是不是很好的做法?
- 6. if else在类构造函数中的条件......是不是很好的做法?
- 7. 在PHP中使用exec是不是很好的做法?
- 8. 直接JSON.stringify Javascript对象是一种很好的做法吗?
- 9. 在JavaScript中使用箭头函数是否被认为是很好的做法?
- 10. 在while循环中连续调用WaitForSingleObject是不是很好的做法?
- 11. 模块和函数名称是否相同被认为是不好的做法?
- 12. 调用函数作为参数,这是不好的做法?
- 13. 直接在__construct中设置属性是不好的做法吗?
- 14. 使用线程来暂停一个函数是不是很好的做法?
- 15. 在rails中直接编写SQL查询是一种很好的做法吗?
- 16. 是不是很好的做法,或者至少不是不好的做法,不要使用限制
- 17. 在if语句中使用函数是不好的做法吗?
- 18. 在类中使用全局函数是不好的做法吗?
- 19. 在构造函数中使用递归是不好的做法?
- 20. 让观点直接与模型层谈话是否是不好的做法?
- 21. 网站使用自己的API是不是很好的做法?
- 22. 创建函数来访问类变量是不是很好的做法?
- 23. 使用“视图”进行分组是不是很好的做法?
- 24. 在构造函数中使用Override注解是一种很好的做法吗?
- 25. 在另一个操作中通过构造函数调用Struts动作是否是一种很好的做法?
- 26. 直接调用提供者被认为是不好的做法吗?
- 27. 是不是很好的做法,在asp.net中使用大量的viewmodels mvc
- 28. 在python模块中包含一个二进制文件,这是不是很好的做法?
- 29. 它是很好的做法,从我不代码中引用
- 30. 的jQuery + parseInt函数()不是打很好
您需要扩展方法模块,但除此之外,我避免它们并使用共享类。 – 2010-04-29 14:49:30
“转到定义”,毫无疑问。这是一个简单的功能,它允许我们使用Imports语句并调用Module方法,保证我们不必再考虑方法的起源。 +1。 – 2010-04-30 03:37:59