这是一个通用模型接口:
interface API{
public function main();
public function params($value);
}
然后,一般模型类继承它:
class test implements API {
public function main(){
echo 'hello world!';
}
public function params($value){
var_dump($value);
}
}
前端控制器,解析了URL后实例化模型类,调用接口,传递模型数据:
class Control{
private function __construct(){
self::Router();
$obj = new self::$Model();
self::_Interface($obj);
}public static _Interface(API $obj){
$obj -> main();
$obj -> params();
}
}
这是我做的简单的耦合结构,但是,这只是相对于控制器和模型类之间的耦合,而且是通用类,如果是特殊类还得使用特殊的接口和控制器,但问题不在这,问题在于我想让模型之间也通过接口交互(数据耦合?),但是想了很多也没有实际的解决办法,该怎样做这个接口呢???
比如,我需要调用一个数据库类的函数,一般情况下是直接调用:
$db = db::main();
#db -> Query(***********************);
但是,这不符合低耦合概念,我只要一改Query();方法就完蛋了,有什么办法能拉取数据??
或者说,给个数据耦合的实例也行,自己慢慢研究算了....
谢谢啦!
(注:我知道,可能会有人说上面的代码不过完善什么的?的确,我是把前端控制器的一些东西都集成起来了,但这不是我今天讨论的焦点,如果给大家带来了视觉上的不便,请见谅)
interface API{
public function main();
public function params($value);
}
然后,一般模型类继承它:
class test implements API {
public function main(){
echo 'hello world!';
}
public function params($value){
var_dump($value);
}
}
前端控制器,解析了URL后实例化模型类,调用接口,传递模型数据:
class Control{
private function __construct(){
self::Router();
$obj = new self::$Model();
self::_Interface($obj);
}public static _Interface(API $obj){
$obj -> main();
$obj -> params();
}
}
这是我做的简单的耦合结构,但是,这只是相对于控制器和模型类之间的耦合,而且是通用类,如果是特殊类还得使用特殊的接口和控制器,但问题不在这,问题在于我想让模型之间也通过接口交互(数据耦合?),但是想了很多也没有实际的解决办法,该怎样做这个接口呢???
比如,我需要调用一个数据库类的函数,一般情况下是直接调用:
$db = db::main();
#db -> Query(***********************);
但是,这不符合低耦合概念,我只要一改Query();方法就完蛋了,有什么办法能拉取数据??
或者说,给个数据耦合的实例也行,自己慢慢研究算了....
谢谢啦!
(注:我知道,可能会有人说上面的代码不过完善什么的?的确,我是把前端控制器的一些东西都集成起来了,但这不是我今天讨论的焦点,如果给大家带来了视觉上的不便,请见谅)
return $db->select('*')->where($where)->order()->limit();}调用的时候$db = db::main();
$db->fetch($where, $order, $limit);2 或者可以封装一个底层的model基类basemodel::fetch($where, $order, $limit) {
$db = db::main();
return $db->select('*')->where($where)->order()->limit();}模型基础
class test extends basemodel implements API {
function dothing(){
parent::fetch($where, $order, $limit);
}
}没有明白这个和数据耦合有什么关系,这仅仅是调用db的封装!
关于数据库类得问题,我建议你去看看uchome的数据库类,我觉得他的类写得还不错,跟2楼说的比较相似!
额,都不知道自己在说什么了…
我的想法是希望通过某一种标准(应该是标准吧?),让所有的模型类(或者说是带有返回参数的模型类)来继承它,然后,可能我在此模块中需要彼模块的一些返回值作为这个模块的参数之一参与运算.
比如:我有一个login模块,我需要验证用户正确信息便需要调用db类,我不想直接$db -> Query();我希望的是如果能使用如:$fun::fun('db','query','');这样的方法来返回数据,因为,我可能还需要使用到gd类来执行验证图片生成,于是我便$fun::fun('gd','create',mt_rand());所有的操作都不直接使用原有的类名和函数名,而是使用这个标准来传递和返回数据....
我原本是想做一个接口,然后定义一个函数来规范,但是,我发现这样做并不能保证每个模型都适用,因为函数的操作参数多种多样,返回值也是,我能将操作和参数标准化却不能保证将返回值也标准化,这样就失去了这个模型该有的作用了....
不知道该怎么做才是.....????
2楼的大大辛苦了,难为还能写出这么多,好像,使用DB基类封装可以降低耦合,好吧,再好好消化一下,看看是否可以将它扩展成为一个通用的标准应用于我的模型类中....
呵呵....
再次感谢!!!