【问题标题】:How can I use business objects to wrap logic in Codeigniter?如何使用业务对象在 Codeigniter 中包装逻辑?
【发布时间】:2012-10-22 03:14:46
【问题描述】:

我使用 Codeigniter 已经有一段时间了,我希望拥有处理逻辑的业务对象,如下所示:

$comment = new Comment($this->input->post());
$blog = new Blog();
$current_post = $blog->get_current_post();
$current_post->add_comment($comment);

$data['current_post'] = $current_post;
$this->load->view('post_view',$data);

而不是这种方法:

$this->load->model('comment_model');
$this->load->model('blog_model');
$this->load->model('post_model');

$comment = $this->comment_model->create_from_array($this->input->post());
$blog = $this->blog_model->get_blog();
$current_post = $this->post_model->get_current_post($blog);
$this->post_model->add_comment($current_post,$comment);

$data['current_post'] = $current_post;
$this->load->view('post_view',$data);

【问题讨论】:

  • 对我来说毫无意义。面向对象是服务器的错误范例。我仍然记得 Java Enterprise Beans 的恐怖。 CI 方法实际上是单例(设计模式)的方法(每个负载都扩展了单例层次结构)。这更有意义。仍然很奇怪,但可行的奇怪。服务器的一个很好的比喻是电子电路,转换逻辑(电路板)是硬连线的,请求(输入)被转换为响应(输出)。除此之外:)你的问题很模糊。你需要什么样的答案?
  • 我发现最接近的解决方案是[这里][1] [1]:stackoverflow.com/a/10803244/385402
  • @PatrickSavalle 这是一个真正的问题,关于使用对象(我们自己的对象)做一些动作,它的问题有完美的逻辑,我留在这里同样的问题。

标签: php codeigniter activerecord business-logic


【解决方案1】:

您想要的是改变 codeigniter 的工作方式,而不加载模型,它如何知道从哪里获取数据?如果你想按照你建议的方式去做,你将不得不扩展核心控制器类并对你的代码做出很多假设。例如,当您创建一个新实例 Comment() 时,它应该加载一个模型,并且传递给它的参数应该访问该模型中的某个方法。

您将简单地为已经存在的功能制作一个很好的包装器,这很好,但最终您的代码可能看起来更好,但它仍然可以正常工作。

【讨论】:

    猜你喜欢
    • 2015-11-07
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2012-05-27
    • 2020-09-19
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多