gpt4 book ai didi

php - 关于使用类的类的开始 OOP 问题

转载 作者:可可西里 更新时间:2023-10-31 22:58:34 27 4
gpt4 key购买 nike

我正在尝试用一组不错的类(class)替换按程序编写的网站,作为学习练习。

到目前为止,我已经创建了一个基本上在数据库主表中包含一行的记录类。

我还创建了一个 loader 类,它可以:

loadAllFromUser($username)
loadAllFromDate($date)
loadAllFromGame($game)

这些方法从数据库中获取所有有效行,将每一行打包成一条记录,并将所有记录放入一个数组中。

但是,如果我只想处理一个 记录怎么办?我尝试了一下,最终得到的代码几乎与我的程序原件完全相同。

我也不确定那张唱片会去哪里。我的加载程序类是否具有 protected 记录属性?

我有点困惑。

编辑 - 另外,我应该在哪里放置类似 HTML 模板的东西来将记录输出到站点?是记录类、加载器还是第 3 类?

最佳答案

我建议考虑使用像 Doctrine 这样的东西用于抽象您的 db-to-object 内容,而不是出于学习目的。

就是说,有很多方法可以对这种类型的事物进行建模,但总的来说,处理它的库(无论是本土的还是非本土的)似乎倾向于在高层次上拥有:

  • 代表映射到数据库的对象的类
  • 一个表示对象映射到数据库的方式的类
  • 代表从数据库中检索对象的方法的类

考虑需要完成的不同任务,并尝试将它们简洁地封装起来。 The Law of Demeter牢记是很有用的,但不要在这一刻试图理解面向对象设计理论中的所有内容而陷入困境——思考、设计、编码和查看你的弱点在哪里会更有用设计欺骗你自己。

对于您的“处理一个记录,但不复制一堆代码”的问题,也许像让您的 loadAllFromUser 方法实际上是调用私有(private)方法的方法,该私有(private)方法(例如)参数是要检索的记录数,如果该参数为空,则检索所有记录。

您可以更进一步,实现 __call在你的 loader 类上。假设它可以知道或找到您想要加载的字段,您可以将参数构造为以编程方式进行加载的函数——查看函数的公共(public)部分,看看有什么不同,看看是否可以找到一种方法将这些不同的部分变成函数参数,或者其他可以避免重复的东西。

MVC值得一读你的第二个问题。至少,我可能希望将它放在一个单独的类中,该类希望传递一条记录来呈现。记录可能不应该关心它在 html 中的表示方式,为记录制作标记的东西不应该关心记录是如何获得的。通常,您可能希望尝试使事物尽可能独立。

要习惯并不是一件容易的事,而且大多数“擅长”这种设计都是实践问题。对于实际功能,测试可以提供很多帮助——假设您正在编写加载程序类,并且您知道如果调用 loadAllFromUser($me) 应该得到一个包含三个特定记录的数组你的数据集(即使它是仅用于测试的数据集),如果你有一些你可以运行的东西会在你的加载器上调用它并检查正确的结果,它可以帮助你知道你的代码至少从角度来看是正确的行为,如果不是来自设计——并且当您更改设计时,您可以确保它仍然正确运行。 PHPUnit似乎是 php 领域最流行的工具。

希望这能为您指明一组有用的方向,而不是让您感到困惑 :) 祝您好运,万事如意。

关于php - 关于使用类的类的开始 OOP 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6715658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com