就在最近,可能是因为我一直在维护一些旧的代码,我已经开始研究如何/为什么我做事了。和你一样。
我的大多数Delphi编程都是内部选择,或者是分散在Web或手册中的示例。在某些事情上,只是因为“我就是这样做”
我目前想知道的是变量,程序,功能等声明。
当我使用表单时,我会将所有程序和功能放在公共或私有下。虽然我会尽量避免全局变量和常量,但在接口或实现中通常会在 var 或 const 下,具体取决于它们需要调用的位置(偶尔会他们将进入公共/私人)
否则,如果它只是一个单元,我将在接口中声明该过程并在实现中使用。我最近维护的一些代码没有接口声明,而是在程序之后通过调用正确排序所有内容......
有没有正确的方法呢?课程中应该/不应该有什么规则?或者它是一种风格/什么时候开始的东西?
编辑以添加
我的问题不是关于程序声明是私有/公开的,而是TForm单元中的所有声明是否应该进入其中一个。同样,var / const应该是一个还是另一个?
进一步澄清
据我所知,不在界面中声明,或在public / private / etc中声明会影响我的应用程序中其他单位的程序/功能的可见性。
我的问题的核心是为什么我不想宣布? - 尤其是当在私人场所进行表格/单位工作时,更明确的是宣布的东西不可供其他单位使用......
干杯 丹
答案 0 :(得分:6)
根据具体实例可能具有不同值的所有内容属于类,即
TDog = class
strict private
FColor : TColor;
FName : String;
public
property Color : TColor read FColor write FColor;
property Name : String read FName write FName;
end;
颜色和名称显然是每只狗的属性(每只狗在这里都有其他值)。
一般规则:
private
(在此类和此单元中可见)或strict private
(仅在此课程中可见)public
属性。这使您可以自由地在不更改类的接口的情况下将简单的字段访问更改为更复杂的getter / setter方法。private
足够,则无需将其protected
(在子类中也可见)。并且只从外面制作你真正需要的那些东西{.1}。public
。published
条款也是如此。您可能会混淆术语全局变量。如果它在类中声明它不是全局变量(即使声明为uses
)。全局变量(你正确认为可以避免)总是进入接口或实现部分的public
部分(按照上述一般规则优先选择)
答案 1 :(得分:4)
问题似乎涉及范围。换句话说,事物可以或应该是多么容易获取。
作为一般准则,您希望尽可能减少事物的范围,但仍然可以保持足够的可访问性以便重复使用。原因是:
话虽如此,数据(变量,常量,类字段,记录属性)和例程(函数,过程,类上的方法)之间也存在区别。您需要更严格地将指南应用于数据,因为“奇怪使用”数据可能会以极其意外且难以调试的方式干扰您的某些例程。
要记住的另一件事是全局变量和类字段或记录属性之间的特殊区别:
Screen
对象,我在2个屏幕上工作;我们的许多客户使用4到6个。)因此,将这些“位置”从最大范围列为最小范围,您通常会努力选择列表中较低的位置(尤其是数据)。
我必须承认:我在这里提出的内容肯定是过度简化。了解目标是一回事,实际实现目标则是另一回事。在封装(隐藏东西)和暴露受控接口之间存在平衡行为,以实现高水平的可重用性。
成功平衡这些需求的技术属于一类关于系统设计的更复杂(有时甚至是有争议的)问题。糟糕的设计很可能会导致人们“过多”地暴露“太大”的范围,并且(可能矛盾地)也会降低可重用性。