6

旧タイトル: ユニットごとに何クラスあるのが望ましいですか?

私の質問は Delphi に固有のものです。Java と C# の世界では、一般にクラスごとに 1 つのファイルを持つことがかなり受け入れられている方法だと思います。Delphi では、ユニットに複数のクラスがある場合、プライベート メンバーは実際にはプライベートではないため、これは Delphi でも従うのに適した規則だと思います。

そこで、2 人の異なる上級 (おそらく私よりも経験豊富な) プログラマーから、コードを分割しすぎていると聞いて驚きました。そのうちの 1 人は、ユニットに 5 ~ 6 クラスを配置することをためらわないようにと私に言いました。

これらのプログラマーの反応を正当化し、説明できる、私が気付いていない「モジュールごとに1つのクラス」ルールに関する問題はありますか?

4

3 に答える 3

2

場合によります。従うべき正確な規則はありません。通常、ビジネス機能を理解するには、論理的で共通の依存関係またはより適切な単位でクラスをグループ化する必要があります。

たとえば、小さなhelperadiacent補完的なクラスがたくさんある場合、それらすべてを 1 つのユニットに入れる理由があります。Borland が DB.pas ユニットで行ったように。そこにあるすべての一般的な DB 要素: TDataSet、TDataSource、TField など...

フォーム、つまり TForm の子孫 ボーランドは、dfm リソースの読み込みなどのために、ユニットごとに 1 つを推奨しています...

通常、「uses FOO;」と書くとき。コンパイラが FOO からのすべてのものを含むことを意味します。クラス、const、型などにアクセスすることができます

Delphi ユニットの最新バージョンでは、名前空間として扱われます。コードをより適切に整理できます。

于 2012-07-21T15:04:40.320 に答える
2

モジュールの意味がわかりません。

Java では、ファイルごとに 1 つの public クラスが必要であり、クラス名はファイル名と一致する必要があります。ifs、ands、buts はありません。そのファイルには、他のパッケージのプライベート メソッドまたはプライベート メソッドを含めることができますが、パブリック クラスは 1 つだけです。

「モジュール」が「パッケージ」を意味する場合、パッケージに複数のクラスがあることは一般的だと思います。規範はありません。それを確認するには、JDK自体を見てください。java.utiljava.lang、 、java.sqlには多くのクラスがありjavax.swingます。

この 2 つを除けば、あなたやいわゆる「シニア プログラマー」が何を指しているのかわかりません。何事も過剰に行うことが可能であり、独断的な規則に盲目的に従うべきではないことに同意します。

しかし、分解はコンピュータ サイエンスです。いや、問題解決です。基本的なことです。無理をするよりも無視する方が一般的です。

于 2012-07-21T14:39:58.733 に答える
0

単元一クラスは厳しすぎる。1 つの単元に参加できるように、クラスが関連している場合があります。

プロテクト変数とプライベート変数のバックドアの問題は、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;     
于 2012-07-21T15:06:38.603 に答える