在OOP架构中管理逻辑

时间:2014-03-27 09:45:25

标签: php oop

说我有

  • 请求,
  • 验证请求,
  • 使用DB,
  • 使用会话,
  • 日志记录,
  • 并输出。

在OOP中,应该根据抽象逻辑创建哪些类和对象?

我应该明确调用哪些方法以及应该自动运行哪些方法?我是否需要对象和类之外的变量?

例如,我创建一个说Worker类的对象并将请求传递给它。是应该在__construct方法中验证并保存为property,还是应该明确地呼叫说verify_input(),接收$result然后将其传递给save_input($result)

希望我能说清楚。

1 个答案:

答案 0 :(得分:1)

控制器

我会有控制器类,让我们说WorkerController,其中包含与指定实体/对象相关的所有操作,并且还有Request

服务

然后我会创建服务类,让我们说WorkerService我将在其中编写该对象的所有业务代码

DAO

我也有DAO层,这是一个将所有数据访问与应用程序需求分开的类。让我们说WorkerDAO(简言之,在这里建立您的查询)。

验证

关于验证,你可以创建一个父类,让我们说Validator,你可以在其中处理一系列错误,然后为你需要验证的每个对象扩展这个类。 E.g WorkerValidator(在这里你进行了所有验证)。

接口

另外,我会为每个服务和DAO提供一个界面。

实施例

class WorkerService implements WorkerServiceImpl

class WorkerDAO implements WorkerDAOImpl

界面示例

interface WorkerDAOImpl {
    public function save(Worker $worker);
    public function edit(Worker $worker);
    public function remove(Worker $worker);
    // and so on...
}

您也可以拥有这些方法的主界面,因为您将在许多DAO中使用它们

所以它变成了

class WorkerDAO implements DAOImpl, WorkerDAOImpl

interface DAOImpl {
    public function save(Worker $worker);
    public function edit(Worker $worker);
    public function remove(Worker $worker);
    // and so on...
}

interface WorkerDAOImpl {
    public function findByCode(Worker $worker);
    public function findByBoss(Worker $worker);
    public function findByWhatever(Worker $worker);
    // and so on...
}

注意

  • 服务和DAO必须实例化 ONCE 。然后他们一定是 至少在所有控制器中都可用。
  • 所有流程必须基于对象。这意味着您的服务 方法以及DAO和Validator必须接收对象并返回对象(或true / false)。
  • 您的服务将包含您的DAO。

示例:

class WorkerService {

    private $dao;

    public function __construct($dao) {
        $this->dao = $dao;
    }
}

这是一个基于某些MVC模式的非常基本的结构,我认为从哪里开始可能是一个好点。玩得开心: - )