【发布时间】:2012-01-11 19:43:40
【问题描述】:
请说实话,如果必要的话,请撕毁我的作品。
所以我正在重写我最近制作的一个小型网络应用程序。原因很简单,代码变得非常混乱,我想学习和应用更好的 OO 设计。这个应用程序应该做的只是简单的 CRUD。
我有一个包含 3 个表的数据库,companies 和 partners 彼此无关,city 与公司和合作伙伴具有 1:n 关系。很简单,真的。现在,我有几个问题将在我的帖子末尾说明。这里我只是尝试解释一下:
我的第一个方法是创建类 company、partner 和 city,从数据库中获取所有数据集并从中创建对象:
class company {
private $id = null;
private $name = null;
private $city = null;
//many more attributes
function __construct( $id, $name, $city, [...] ) {
$this->id = $id;
$this->name = $name;
$this->city = $city;
//huge constructor
}
/*
* getters + setters here
*
* no need to paste the partner class as it looks just like this one
*
*/
}
这就是所有这些类所做的。我从数据库中获取每个数据集并构建公司、合作伙伴和城市对象(这些类中的属性城市是一个自身具有多个属性的对象)并将它们保存到两个数组arr_companies 和arr_partners 中,然后保存这些对象。 ..它像那样工作得很好。
现在,我想要更新、插入、删除数据库,所有 3 个类(城市、公司、合作伙伴)都需要此功能。我的方法是创建一个带有构造函数的新类,该构造函数基本上采用 2 个字符串命令和对象,例如('update', 'company') 然后它将直接在数据库中更新公司,而我的对象保持不变。这让我很伤心,因为我有这么好的构造对象,但我不知道如何使用它们。
问题:
拥有如此庞大的构造函数是不是很糟糕(我最大的构造函数会占用 28 个参数)?
您是否应该有一个单独的数据库类 操作还是最好有一个抽象类或 接口,让子类自己处理更新、删除、插入?
-
是否经常只在数据库中写入、删除,或者我应该只将这些更改应用于我的对象,然后仅在稍后(例如会话结束时)执行对数据库的命令?
我认为这样的应用程序之前一定已经完成了无数次。这里的正确方法是什么?创建对象、使用对象、将它们保存到数据库中?
我有很多问题,但我想其中有很多我不知道该怎么问。
请注意,如果可能的话,我现在不想使用 ORM。
非常感谢您的宝贵时间。
【问题讨论】:
-
28 个参数太疯狂了。你可以传入一个数组,或者更好地放弃它并使用 ORM,例如 Idiorm。