我一直在网上寻求有关如何设计我的php类以分离我的业务逻辑和数据层的帮助。我已经开始设计一个我认为非常酷的课程但后来发现了PDO和ADODB并且有一个很好的面孔时刻意识到我正在重新创建方向盘。我现在的问题是我仍然不太明白如何分离我的逻辑和所有SQL查询。
我从数据库架构中删除了大部分内容,并放下了这两个表,因为我觉得它们很容易理解。假设我有一些文件,它们在我的服务器上保存在目录中的路径(这些目录可以在其他目录中)。假设我需要一些基本功能,比如从我的一个文件中获取根目录,或者获取当前目录中的目录列表。
+--------------------+ +----------------+
| Files | | Directories |
+--------------------+ +----------------+
| id | | id |
| name | | name |
| path | | directory_id |
| directory_id | +----------------+
+--------------------+
精心设计的课程会是这样的:
class Files {
public function __construct( $file_id ) {}
public function getDirectory() {}
public function getRootDirectory() {}
public function getPath() {}
public function move( $directory_id ) {}
}
class Directories {
public function __construct( $directory_id ) {}
public function getRootDirectory() {}
public function move( $directory_id ) {}
public function listContent() {}
}
我使用通过构造函数传递的ID在构造函数中获取对象的所有数据?我是否应该在构造函数中传递PDO对象,或者我是否缺少一些有价值的设计模式?是否应该在这里对所有SQL进行硬编码?我用PDO得到的一件事是我可以很容易地从MySQL切换到MSSQL但是它们的SQL语法都有差异所以不会给我带来问题吗?
我知道这些是更多的理论问题而没有一个好的答案,但我缺乏工作同事讨论这个问题(当我说他们甚至不知道设计模式是什么时,我不是在开玩笑)所以我发现自己转向网络。如果我的问题太模糊,请随意提出一个好的讨论类型的地方,我可以问这种东西,我会非常感激:)
答案 0 :(得分:2)
很难说这对你的真实情况有多大影响,但你应该查看ORM(对象关系映射)可以为你做些什么。有许多非常有用的ORM解决方案,可以使这些东西更简单。当然,它们并不适用于所有解决方案,但ORM可以帮助您在中间层实现逻辑(通常是)。
答案 1 :(得分:1)
如果您希望保持SQL与所有DMBS一起工作,请从评论中读取,我认为您可以使用一些SQL抽象层。
我建议您Zend_DB_Select
http://framework.zend.com/manual/en/zend.db.select.html
如果您阅读其功能,则说明: