班级设计:习惯类中的'habits'列表,还是不同的类?



我有一个关于类设计的问题。我想我理解了面向对象编程和设计背后的理论,但是我很难在我的web应用程序上实践它。

让我们假设我有一个web应用程序,我记录我的习惯。我有名为"习惯"、"事件"one_answers"目标"的数据库表。我想我会开一门叫做"习惯"的课,在我看来这听起来很合乎逻辑。到目前为止一切顺利。但我也有应用程序的主屏幕,我想在那里显示我所有习惯的列表(每个习惯都有一个名字,但我还需要显示"事件"表中的一点信息)。现在我的问题来了:这一系列习惯,是一个不同的类别吗?还是一般"习惯"类的方法?什么是好的练习?这取决于什么样的东西?在做这些决定时,我需要考虑哪些方面?

Habit类应该代表一个单一的、独特的习惯;它不应该知道如何生成其他Habit对象的集合。PeteH给出了一个很好的答案,只是PHP不支持类java泛型。

在这种情况下,我要做的可能是有一个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对象组织成适当的数据结构是系统的另一部分的责任。

不,"习惯列表"位于习惯类的上方。

我不懂php,但是在c#中你可能有:

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

允许你在"习惯"级别添加功能,或者更直接,你可以直接使用

List<Habit>

,如果习惯级别不需要任何功能。

但是习惯和习惯是完全不同的。

相关内容

  • 没有找到相关文章

最新更新