0

我有一个与课程设计有关的问题。我想我了解面向对象编程和设计背后的理论,但我很难在我的网络应用程序上实践这一点。

假设我有这个网络应用程序,我正在跟踪我的习惯。我有称为“习惯”、“事件”和“目标”的数据库表。我想我会开设一门名为“习惯”的课程,在我看来这听起来很合乎逻辑。到目前为止,一切都很好。但我也有应用程序的主屏幕,我想在其中显示我所有习惯的列表(每个习惯都有一个显示的名称,但我还需要显示每个习惯的“事件”表中的一些信息) . 现在我的问题来了:这个习惯列表,是一个独特的类别吗?还是一般“习惯”级的方法?有什么好的做法?这取决于什么样的事情?在做出这些决定时,我必须考虑哪些方面?

4

2 回答 2

2

不,“习惯列表”位于习惯类之上。

我不知道 php,但例如在 c# 中你可能有:

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

这将允许您在“习惯”级别添加功能,或者更直接,您可以拥有

List<Habit>

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

但是习惯和习惯绝对是截然不同的。

于 2013-05-10T20:10:39.190 回答
2

Habit班级应该代表一种独特的、独特的习惯;它不应该知道如何生成其他Habit对象的集合。PeteH 有一个很好的答案,除了PHP 不支持类似 Java 的泛型。

在这种情况下我会做的可能是提供一种通过标识符HabitModel检索特定对象的方法和提供对象集合的方法。最常见的是在 PHP 中,您会看到这个集合以数组的形式返回。HabitHabit

<?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对象负责表示与 a 关联的数据Habit;它不负责收集数据或处理多个Habit对象的结构。将对象组织Habit成适当的数据结构是系统另一部分的责任。

于 2013-05-10T20:29:41.060 回答