面向对象思想的留言功能实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luyaran/article/details/84748236

这一次呢,我们主要是来利用面向对象的思想来完成一个留言功能的模型,这个模型呢,不涉及数据库以及界面显示等操作,只是用来演化面向对象的一些思维。

我们先来看面向过程的思维来解读这个留言功能,在这个思维里,要设计一个留言本,一切都会以这个功能为核心,抓到什么,就是什么,按着流程走下来,也就是用户填写信息》留言》展示,类似这种。

然后我们就来用面向对象的思维来考虑下这个功能。

在面向对象的世界里,我们要想尽办法把肉眼能看见的或者不能看见的,但是实际存在的东西或者说流程抽象出来,既然是留言功能,那么就存在留言内容这个实体,这个实体我们先来假设它包含姓名、E-mail、留言内容这三个元素,我们先来创建留言实体类message,代码如下:

class message
{
    public $name;
    public $email;
    public $content;

    public function set($name,$value)
    {
        $this->name = $name;
    }

    public function get($name)
    {
        if (!isset($this->name)) {
            $this->name = null;
        }
    }
}

上述代码我们可以看做是一个真实存在的、经过抽象后的实体模型,完事,我们需要创建一个留言操作的模型,这个模型得包括留言这个功能的基本属性和一些基本操作,代码如下:

class g_book_model
{
    private $path;
    private $data;

    public function set_path($path)
    {
        $this->path = $path;
    }

    public function get_path()
    {
        return $this->path;
    }

    public function open()
    {
        # code...
    }

    public function close()
    {
        # code...
    }

    public function read()
    {
        return file_get_contents($this->path);
    }

    public function delete()
    {
        file_put_contents($this->path, "there is empty now");
    }

    public function write($data)
    {
        $this->data = $data->name."&".$data->email."&".$data->content;
        return file_put_contents($this->path,$this->data,FILE_APPEND);
    }
}

我们在项目中实际操作的时候可能会更加复杂,例如日志操作或者说数据安全性检测等,咱这里就没搞那么多哈,为了防止有的伙计呢,直接拿了咱这个代码来进行使用,所以咱也为了方便你得扩展,在定义一个类来负责数据的逻辑处理,代码如下:

class level_model
{
    public function write(g_book_model $gb,$data)
    {
        $gb->get_path();
        $gb->write($data);
    }
}

上述代码属于业务逻辑代码,大家可以在上述代码中进行扩展,完事我们最后通过一个类,来控制对各种操作的封装,这个类呢,是直接面向客户的,所以呢,得包含留言的增删查的功能,我们可以形象的把这个类理解为留言功能所提供的直接面向使用者的接口,这个类会封装操作的细节,只需要调用类中相应的方法即可,具体代码如下:

class author
{
    public function message(level_model $l,g_book_model $g,message $data)
    {
        $l->write($g,$data);
    }

    public function view(g_book_model $g)
    {
         return $g->read();
    }

    public function delete(g_book_model $g)
    {
        $g->delete();
    }
}

我们来通过一部分代码来测试下上述代码的可用性:

$message = new message();
$message->name = "luyaran";
$message->email = "[email protected]";
$message->content = "who is my love";

$gb = new author();
$pen = new level_model();
$book = new g_book_model();

$book->set_path(dirname(__FILE__)."/book.txt");
$gb->message($pen,$book,$message);
echo $gb->view($book);
$gb->delete($book);

好,到这里呢,大家可以再次通盘看一下我们的代码,是不是比面向过程的代码要复杂一些,同时代码量也是有增加的,但是,如果这个留言功能让几个人来同时完善的话,我们再来感受下,面向对象和面向过程,那一个更加复杂,空口无凭,咱们再来完善下上面的代码,增加一个数据追加的功能:

 public function add_data()
 {
        return file_put_contents($this->path,"&add_data",FILE_APPEND);
 }

上述代码是添加在g_book_model模型中的,完事就是在控制类author添加相应的执行方法如下:

public function add_data(g_book_model $g)
    {
        $g->add_data();
    }

测试代码如下:

$message = new message();
$message->name = "luyaran";
$message->email = "[email protected]";
$message->content = "who is my love";

$gb = new author();
$pen = new level_model();
$book = new g_book_model();

$book->set_path(dirname(__FILE__)."/book.txt");
$gb->message($pen,$book,$message);
echo $gb->view($book);
$gb->add_data($book);
echo "<br>";
echo $gb->view($book);
$gb->delete($book);

完事之后,会在原来数据的基础上追加一个add_data。

类似上述简单两段代码,我们就可以追加一段代码,实现一个数据追加的功能,而且已经存在的方法可以不用修改,只需要在相关的类中新增方法就可以。

咱们这个程序呢,只是简单的体现了设计模式,还有许多要改进的地方,每个程序员心中都有自己的面向对象,项目越大,越能体现出模块划分、面向对象的好处,咱们这里就不做过多的赘述了。

好啦,本次记录就到这里了。

如果感觉不错的话,请多多点赞支持哦。。。

猜你喜欢

转载自blog.csdn.net/luyaran/article/details/84748236