0

クラス編成について質問です。オブジェクト指向プログラミングと設計の背後にある理論は理解していると思いますが、Web アプリでこれを実践するのに苦労しています。

私が自分の習慣を追跡しているこの Web アプリを持っているとしましょう。「習慣」、「イベント」、「目標」と呼ばれるデータベーステーブルがあります。「Habit」という名前のクラスを作成すると思いますが、これは私の意見では非常に論理的に聞こえます。ここまでは順調ですね。しかし、すべての習慣のリストを表示したいアプリのホームスクリーンもあります (各習慣には表示される名前がありますが、習慣ごとに「イベント」テーブルからほんの少しの情報を表示する必要もあります) . ここで質問です。この習慣のリストは、別のクラスですか? それとも、一般的な「習慣」クラスのメソッドですか? 良い習慣は何ですか?これはどのようなものに依存していますか?これらの決定を行う際に、どのような側面を考慮する必要がありますか?

4

2 に答える 2

2

クラスはHabit、特異で明確な習慣を表す必要があります。Habit他のオブジェクトのコレクションを生成する方法を知っているべきではありません。PeteH は、Java のようなジェネリックが PHP でサポートされていないことを除いて、かなり良い答えを出しています。

この状況で私が行うことは、識別子によってHabitModel特定のオブジェクトを取得するHabitメソッドと、オブジェクトのコレクションを提供するメソッドを提供することHabitです。最も一般的な PHP では、このコレクションが配列として返されます。

<?php

class HabitModel {

    public function getHabitById($id) {
        $data = $this->db->query($habitSql); // assuming this will be something that returns data associated to $habit_id
        return new Habit($data);
    }

    public function getAllHabits() {
        $allData = $this->db->query($allHabitSql);
        $habits = array();
        foreach ($allData as $data)
        {
            $habits[] = new Habit($data);
        }

        return $habits;
    }

}

これを適切に設計する方法を考えて、単一責任の原則を順守するよう努めることをお勧めします。クラスは、特異なことを行う責任を負うべきです。この場合、Habitオブジェクトは に関連付けられたデータを表す責任がありHabitます。Habitデータを収集したり、複数のオブジェクトの構造を処理したりする責任はありません。オブジェクトを適切なデータ構造に編成するHabitことは、システムの別の部分の責任です。

于 2013-05-10T20:29:41.060 に答える
2

いいえ、「習慣のリスト」は Habit クラスの上にあります。

私はphpを知りませんが、たとえばc#では次のようになります。

class Habits : List<Habit>
{
   ....
}

これにより、「習慣」レベルで機能を追加したり、さらに簡単に機能を追加したりできます

List<Habit>

習慣レベルで機能が必要ない場合。

しかし、習慣と習慣は明確に異なります。

于 2013-05-10T20:10:39.190 に答える