我们正在开发一个代码相当重的PHP5项目,在上周我开发了一个RESTful API的PoC。我们将模型类与业务类分开。
尝试实现CRUD功能,我发现,直接针对模型实现CRUD非常简单,而针对业务逻辑实现它不是,因为它的功能特定于当前存在的视图及其接口不不提供实现API所需的通用数据访问模型。
考虑到这一点,我想到了以下问题:
与数据交互的最佳方式是什么,保持模型的灵活性和保持模型目前不关心的功能(如发送邮件时)更改电子邮件地址时的激活链接)?
以前在django上工作很多,大多数业务逻辑都在模型中实现,为什么要保持业务逻辑分离?你有任何现实生活中的例子吗?如果有的话,这会解决什么问题呢?
我也想到了一些可能的解决方案:
您认为有什么利弊,您会做什么?
答案 0 :(得分:2)
如果您将数据分区存储在数据访问层中,您将获得所需的分离以及模型中的功能:
DAL (doing queries etc)
|
Model (doing business)
|
Controller
|
View
所以在视图中你有一个动作:标记为付费。因此,您的控制器获取请求(POST)/ invoice / 1 / markaspaid(或您使用的任何其他URL结构)。然后控制器调用模型:
$Invoice=new Invoice();
$Invoice->markAsPaid(1);
然后您的模型调用DAL来实际存储此更改。没有必要将其与模型分开。如果它非常复杂或非常复杂,您可能会考虑为复杂任务提供单独的服务。这样你的模型变得更薄,复杂的部分就会分开。
与数据交互的最佳方式是什么,保持数据 模型的灵活性和保持模型的功能 此刻并不关心(就像发送邮件一样 更改电子邮件地址时激活链接?)
我完全不理解这一点。据我所知,你应该将发送电子邮件进程与正常的代码运行分开。所以把它放在队列中然后找到它。它不是您正常代码路径的一部分。您可以从模型中启动它,但这是关于它的。
请参阅此问题,其中包含有关该主题的相关信息: Cakephp cron job to call a controller's action