我刚发布这个问题,所以你们中的一些人可能会以正确的方式指出我.我正在慢慢升温到OOP,开始理解这个概念.我想建立一个良好的核心或基础,用作CMS后端.它也将使用MVC.我一直在使用http://gilbitron.github.com/PIP/作为MVC基础.
我无法弄清楚的事情如下:
比如说,在后端的项目页面上我有两个部分:htmltext和项目,我应该能够编辑它们.uri将类似于:// domain/backend/projects(该方法将是索引并显示2个部分)
当我点击项目时应该如何处理?// domain/backend/projects/projects /或// domain/backend/projects/list /
更进一步,项目将保存一些图像或图库://域/后端/项目/编辑/ 5 /图库/ 2
我的问题是,首先:这是一个很好的方法,更重要的是如何在OOP中实现
主要项目控制人:
class projects {
function index(){
// view index
}
function edit{
$project = new Project();
$projectdata = $project->load(5);
}
}
Run Code Online (Sandbox Code Playgroud)
单个项目控制器
class project {
function __construct(){
$this->projectmodel = $this->loadModel('project_model'); // prepare the model to be used
}
function load($id){
$this->projectmodel->loadproject($id);
}
}
Run Code Online (Sandbox Code Playgroud)
项目模型
class project_model extends model { //extends for DB access and such
function __construct(){
// do stuff
}
function loadproject($id){
return …Run Code Online (Sandbox Code Playgroud) 我不希望任何人说"你不应该重新发明轮子,使用开源ORM" ; 我有一个立即的要求,不能切换.
我正在做一些支持缓存的ORM.即使不支持缓存,我仍然需要此功能,以便知道何时将对象写入存储.模式是DataMapper.
这是我的方法:
我有一个名为AbstractModel所有模型继承的抽象类.它有一个isDirty()名为is_dirty的私有(也可以保护,如果需要)的属性调用的公共方法.它必须返回true或false,具体取决于对象数据是否有更改,因为它已加载.
问题是:有没有办法"is_dirty"在每个setter中编译内部标志而不编码$this->is_dirty = true?我的意思是:$this->attr = $value除了业务逻辑需要更改代码之外,我希望大多数时间都有setter .
其他限制是我不能依赖,__set因为在具体的模型类中,属性已经作为私有存在,因此__set永远不会在setter上调用.
有任何想法吗?其他ORM的代码示例被接受.
我的一个想法是修改NetBeans setters模板,但我认为应该有一种方法可以在不依赖IDE的情况下执行此操作.
我的另一个想法是创建setter,然后用下划线或其他东西更改private属性的名称.这样setter会调用__set并在那里处理一些代码来处理"is_dirty"标志,但是这会破坏POPO概念,而且很难看.