随着Delphi XE2的出现,Xml.Internal.AdomCore_4_3
或System.StrUtils
等范围内的单位开始流行。
我喜欢使用这种描述性名称的能力,但我很困惑的是命名约定和优先目录结构。
应该是
com.company.project.Security.Compression.ZLib.pas
,如Java
System.Security.Compression.ZLib.pas
,如.NET
或其他什么?
我应该将文件放在像这样的目录strcuture中吗?
System\Security\Compression\System.Security.Compression.ZLib.pas
或只是根文件夹中的System.Security.Compression.ZLib.pas
?
看看Embarcadero组织他们的单位的方式我留下的印象是他们只是保留目录结构,如Delphi 5/6/7 /.../ XE
请告知。
答案 0 :(得分:4)
我相信每个人都应该确定他们的单位。 (只有当您是第三方组件供应商时才需要这样做 - 因为您希望减少所使用的任何外部设备上的名称冲突。)通过确定单元的范围,您将需要很长的路要防止单元命名的问题。
我强烈建议您使用全局前缀,用于所有内部创建的单元。您可以使用公司名称的缩写形式或您的全名作为您的首选。我建议只是简单易读的东西。
如果您在少数几个主要项目中工作,那么项目特定的名称将会跟随,例如Widgets产品/项目的Acme.Widgets.SlicerUtils.pas和Wonkers产品的Acme.Wonkers.WippleFactory.pas。
无论命名如何,这都应与您对项目进行版本化和管理源代码的方式密切相关。您希望能够轻松地为Widgets项目的1.2.1.0版本设置构建,以包括与该特定构建相关的所有单元。 (1.2.1.0小部件可能包含系统库的显式修订版1.5.3.0)这需要所有开发人员易于理解并且无法管理。您应该希望一键操作开始处理Widgets项目的1.2.1.1。
子目录问题由一般规则回答,用于将版本控制的项目分隔到它们自己的子目录中。因此,如果您的Acme.System.Security.Compression库是与Acme.System.Security.Auth分开进行版本控制的,那么您将拥有一个root \ System \ Compression子目录结构......但更有可能您只需要Acme。 Widgets.System)
希望这有点帮助。
答案 1 :(得分:3)
与Java和.NET不同,“。”在新的作用域文件名中,在运行时或设计时不提供任何功能。 System.StrUtils.pas可以很容易地被称为System_StrUtils.pas或SystemXStrUtils.pas,我们的情况与现在完全相同。
因此我不建议您采用新的命名约定,除非您是公开分发组件的组件开发人员。
即便如此,我也不会将你的单位命名为System.MyUnit.pas,因为我认为前缀应限于官方的Delphi系统单位。如果你真的必须采用这个新的约定(我个人认为我不会),我会将你的单位命名为
MyCompany.UnitName.pas
或
MyComponentLib.UnitName.pas
除非您发布双框架库,否则我认为不需要在名称中加入VCL或FMX。