所以我写DataBase
类,这将是之间的密封层PHP Controller
和MySQL View
。
interface iDataBase {
public function drug($action, $drug);
public function company($action, $company);
public function activeIngredient($action, $activeIngredient);
}
起初我还以为使所有setter方法和getter单独像getAllDrugs(),updateDrug(),removeDrug(),getForUpdate(),getDrug()等一个,但后来我意识到,我是无污染的数据库接口太多的功能,再加上这是一个小规模非常的版本,我正在考虑增加多少,更多的类和更多的功能。 所以,而是采用了很多我只是setteled为3.功能$action
将决定什么样的事情呢用户希望与某一类的事情。 因此,就目前而言,可能的操作是这些: "add", "getAll", "getForUpdate", "update", "remove"
但这些功能被屏蔽$action
有不同的事情要做,所以他们的返回结果是不同的,第二个参数也可以是不同的。
是我的解决方案一个好的做法? 我相信你们很多人有同样的问题,你是怎么解决的呢? 是否有任何可能出现的问题?
PS Drug, Company, ActiveIngredient
是所有类
函数应该有明确的规定,有明确界定的,简约的返回类型窄责任。 如果你开始打造“神的功能”,它所做的一切取决于你传递什么样的参数厨房水槽,你会大举进入的硬境内维持面条代码。 你不想,做了,如果你把它传递X返回B,但确实℃,如果你传递Ÿ等返回d的功能...
这是启动具体的 ,当你看到类似的模式出现概括随着时间的推移是个好主意。 因此,创建你确实需要的方法:
public function findUserById($id)
public function findUserByEmail($email)
public function updateCompanyName($id, $newName)
如果你发现自己有这些功能之间共享代码,统一在幕后的代码,以保持干燥:
public function findUserById($id) {
return $this->find('SELECT * FROM user WHERE id = ?', $id);
}
public function findUserByEmail($email) {
return $this->find('SELECT * FROM user WHERE email = ?', $email);
}
protected function find($query, $arg) {
...
}
请勿在启动其他的方式,想你“只需要X,Y和Z”,这似乎很相似,要统一到一个方法,然后再找出有X之间,Y和Z小的差异,并与乱抛垃圾代码特殊情况下,每个。 这只是导致它们要么极大的相左右,一般来说,他们基本上都是自己做什么功能。
你很可能在寻找被称为TableDataGateway (重点煤矿):
表中的数据网关保存所有SQL用于访问 单一 表或视图:选择,插入,更新和删除。 其他代码调用它与数据库的所有交互的方法。
这意味着你将有一个通用的数据库接口,例如一个PDO对象。 你注入你的各种TDG的这一点。 该TDG的然后使用该适配器CRUD数据从数据库中。
例
class CompanyTableGateway
{
private $dbAdapter;
public function __construct(DBAdapter $dbAdapter)
{
$this->dbAdapter = $dbAdapter;
}
public function create($name, $street, $whatever)
{
$this->dbAdapter->exec( 'INSERT INTO companies …' );
}
public function findById($id)
{
return $this->dbAdapter->exec(
sprintf('SELECT * from companies where id = %d', $id)
);
}
// more methods …
}
如果您有这些网关的多,你可以抽象出一般的CRUD逻辑放到一个抽象类,然后从它延长混凝土网关。
然后,您将使用TableModule或类似的其他对象调用对个人网关的方法。
我建议你做的是做一个全球性的数据库类,它控制数据库的基本输入/输出,然后扩展这个到每个表。
这方面的例子可能是一个用户表。 你可以做这个表
- 创造
- 更新
- 删除
然后,您将延长超级数据库类,用类的用户,这将有getter和setter你想拥有,即每个函数:
class Users extends DatabaseClass {
public function update ( $params )
{
// Make the code for an update, and let the SuperClass execute the code.
...
}
public function add ( $params )
{
...
}
public function delete ( $params )
{
...
}
}
这将允许您以后,容易在用户表中添加更多的功能,特别优化查询为您所使用的表/数据。