-3

私は、主にJavaとC#で、クリーンなコーディングに関するアジャイルな本を読んでいます。データクラスとロジック/オブジェクトクラスを区別するという概念を検討します。私はC++で次のような状況にあり、どのバリアントがクリーンなコードであるかを判断できません。いくつかの属性を持つPlaneクラスがあり、そのうちの1つだけが変更されると、これらの属性が変更されます。

最初の方法

class Plane3D {
   public:
      BBox bbox;
      float l,w,h;
      void setbbox(BBox bbox) {
         this->bbox = bbox;
         recalculateLWH();
      }
      void setLWH(float l, float w, float h) {
          //set here
          recalculateBBOX();
      }
};

これは私には理にかなっています。ユーザーにとって、彼は1つのメソッドを呼び出すだけであり、クラスの内部作業を気にする必要がないからです。しかし、これはデータクラスの違反であり、ロジックが含まれています。

2番目の方法

class Plane3D {
   public:
     BBox bbox;
     float l,w,h;
     void setbbox(BBox bbox) {
             this->bbox = bbox;
          }
     void setLWH(float l, float w, float h) {
      //set here LWH
     }  
};

int main() {
  BBox bbox;//init here
  Plane plane;
  plane.setBBox(bbox);
  recalculateLWH(plane);
}

2番目のメソッドは、実際にはデータクラスを実装から分離しますが、クラスユーザーの責任が増し、追加の呼び出しを強制されます。私の理解では、2番目の方法はアジャイルPOVからの正しい方法ですが、最初の方法を使用する方が論理的です。

2つの方法のどちらがあなたたちにとって理解して使用するのがより理にかなっているのか知りたいです

よろしく

4

1 に答える 1

-1

この場合、私はあなたが2番目よりも最初の方法を好むべきだと思います。

  • メソッド呼び出しは、オブジェクトをある正しい状態から別の正しい状態に変換する必要があります。呼び出し後に2番目のメソッドを使用するsetBBox(bbox);と、オブジェクトは実際に誤った状態に移行します。

しかし、「論理クラスの方法」は別の状況で発生する可能性があります。

  • 飛行機を格納庫から着陸帯に移動する必要があると考えてください:)。これで、名前の付いた新しいクラスを導入しTractorて、次のように使用するのが自然になります。tractor.move(plane)
于 2012-08-23T15:45:49.833 に答える