学习OOP PHP:识别测验系统的类,关联

时间:2012-01-22 14:42:10

标签: php oop

我正在开发PHP Web应用程序很长时间但现在正在学习OOP方法。为了学习和练习,我正在开发一个简单的“多项选择题”网络应用程序。当注册用户登录时,会向他显示测验列表。他选择一个,并用多个答案得到问题,其中任何一个都是正确的。

我的问题是:

  1. 识别类的规则是什么?我认为“测验”,“问题” 并且“Answers”可以声明为类。我是对的吗?
  2. 这些类别中的关联类型是什么(或者哪些类别 你会建议)。确定关联的规则是什么?
  3. 如何分离或展示系统类(例如数据库,验证 类)和业务域类?
  4. 如果可以在测验系统的背景下提供答案,我将不胜感激,因为我已经阅读了很多关于“动物狗”课程的例子......感谢您的支持。

2 个答案:

答案 0 :(得分:3)

你会发现有用的一种特殊的OOP风格是Model View Controller范例。

PHP中的类通常表示“对象”或理想情况下完成某项任务的事物。它们的集合可以一起工作以提供更全面的功能,而在孤立中几乎没有用处。

在MVC中,这些类通常被分为(简化术语):

  • 模型:可帮助您使用数据库的类。每个表都有一个模型,每个模型将为您提供保存和检索数据的能力,以及在事实之前和之后对其进行操作。在您的情况下,问题将是一个模型,它可能包含问题本身和答案。

  • 视图:这些不是类,而是您的原始HTML模板,其中包含通过控制器注入模型的数据。在您的情况下,一个视图可能是一个问题视图。另一个可能代表索引页面。还有一个可能会出现调查问卷的结果。

  • 控制器:在您的视图和模型之间充当中间人的类。他们将从相关模型中获取数据并将其传递给视图。在您的情况下,这可能是一个测验控制器。它将从数据库中提取所请求的问题并将其提供给视图,当提交答案时,控制器会将其传递给模型以查看它是否正确,并采取相应的行动。

在这个MCV背后有一个框架(预制的,或者你自己编写的框架),它提供了许多库和抽象层,可以帮助你专注于你的应用程序逻辑。所以会有像ActiveRecord这样的数据库抽象,在OOP上下文中会有常用过程函数的包装器,会有模板系统帮助将数据传递给你的视图并对其进行格式化,等等。 p>

如果您想朝这个方向前进,请考虑使用现有的框架,例如CakePHPCodeIgniter来为您提供一个先机。他们会熟悉OOP(在某种程度上)以及如何使用类对大型项目有益。

答案 1 :(得分:0)

好吧,正如我所看到的,OOP试图让我们的程序员更简单,更难以理解,更具可读性。

没有规则来识别班级。每个程序员都可以为类似的项目实现不同的类。当我决定实施哪些课程时,我会问自己问题 像:

  • 我需要执行哪些功能?
  • 我是否有能够为项目中的类似元素提供支持的函数?

以下是我当前项目的一个示例:我正在制作一个为用户提供图表的分析系统。我创建了两个类,一个叫analytic,第二个叫analyticQueries。第一个负责所有分析数据库更新,第二个负责从数据库中获取数据并为图形引擎做好准备。

为什么我没有制作一个database课程?好吧,我认为它会太沉重,而且我认为有两个主题需要分离才能更好地理解程序的工作方式:一个是编写数据库,另一个是从中读取数据。

另一种思考课程的方式(也是规划数据库的好方法)就是问这些问题:

  • 谁在使用该项目?
  • 使用它的人的行动是什么?
  • 谁在使用谁? (它可以帮助你建立关联。在我的项目中,两个分析类都连接到数据库。我可以创建第三个DBConnection类并将它包含在两个类中,但我认为它会不是那么大,而且在项目中不需要自己的类就足够了。)

在您的网站中,用户是登录的用户,因此您确定数据库中需要user表。您肯定需要questions表和answers表。

您可以根据数据库决定是否需要类,例如userManager可以是一个具有负责所有用户操作(登录,更新详细信息等)的函数的类,并且具有{{ 1}}将处理呈现和验证答案的问题。