老标题:每个单元有多少课程是可取的?
我的问题是针对Delphi的。我认为在Java和C#世界中,通常每个类都有一个文件是一种相当普遍的做法。我认为这也是在Delphi中遵循的一个很好的规则,因为在Delphi中,如果一个单元中有多个类,那么私有成员就不是真正的私有成员。
因此,我很惊讶地听到两个不同的资深程序员(可能比我更有经验)告诉我,我的代码划分得太多了。他们中的一个告诉我不要害羞,在一个单元中安排5-6个班级。
“每个模块一个类”的规则是否有一些我不知道的问题,可以保证并解释这些程序员的反应?
发布于 2012-07-21 22:39:59
我不知道你说的模块是什么意思。
Java要求每个文件有一个公共类,并且类名必须与文件名匹配。没有如果,和,或者但是。在该文件中可以有其他包私有或私有方法,但只能有一个公共类。
如果"module“对您来说意味着" package”,那么我想说在一个包中有多个类是很常见的。没有规范;看看JDK本身就能明白这一点。在java.util
、java.lang
、java.sql
和javax.swing
中有许多类。
除了这两个,我不知道你或所谓的“高级程序员”指的是什么。我同意,任何事情都有可能做得过多,不应该盲目地遵循教条规则。
但分解是计算机科学的-no,是解决问题的基础。忽视它比过度使用它更常见。
发布于 2012-07-21 23:04:40
那得看情况。没有一个确切的规则可以遵循。通常你需要通过logical,common dependency或者更好的方法来理解业务的功能。
例如,如果你有很多小的辅助类,独立的,互补的类,那么就有理由把它们都放在一个单元中。就像波兰德在DB.pas部门做的那样。所有通用数据库的东西: TDataSet,TDataSource,TField等等。
表格,即TForm后代博兰建议每单位一个,因为dfm资源加载等。
通常当你写“use FOO;”的时候,意思是编译器包含了来自FOO的所有东西。您可以访问类、常量、类型等。所以,划分是好的,但保持理性是好的。
在Delphi的最新版本中,单元被视为namespaces。你可以更好地组织你的代码。
发布于 2012-07-21 23:06:39
一个单元一个类太严格了。有时类是相关的,因此它们可以连接到一个单元中。
受保护变量和私有变量的后门问题可以通过使用strict指令来修复:
type
TClass1 = class
private
FField1 : Integer;
strict private
FField2 : Integer;
end;
TClass2 = class
public
procedure MessWithClass1;
end;
implementation
procedure TClass2.MessWithClass1;
var
c1 : TClass1;
begin
c1.FField1 := 1;
c1.FField2 := 2; // Fails!
end;
https://stackoverflow.com/questions/11593034
复制相似问题