我们在决定将 ->flush() 调用放在 Symfony2 应用程序中的什么位置时遇到了麻烦。请让我们看看您是否可以“启发”我们。
我们的应用程序非常大。它目前有大约 30 个捆绑包。我们有 2 个独立的开发团队:一个负责前端(控制器 + 树枝),另一个负责核心(数据库 + 服务 + 模型等)。
前端是一个项目(有自己的包,没有任何理论模型、逻辑或服务,但有树枝、公共图像和 css 和控制器),并且存在于一个存储库中。
Core 是另一个项目(有自己的包,提供服务、模型对象等,内部有教义对象,没有控制器或树枝),并且存在于另一个 repo 中。
这种方法的目标是我们的产品提供不同的前端(Core+Frontend1 用于网络,Core+Frontend2 用于移动设备,Core+Frontend3 用于支持团队,具有一个特殊的网络来管理普通用户)。因此,所有“逻辑”都在“核心”中,并且一个或其他前端项目正在使用相同的服务,因此核心的改进可以改进所有部署,而无需重新测试每一块前端。
所以......我们正在尝试让控制器永远不要访问学说对象,而是访问“建模层”,所以如果持久层发生变化,控制器和树枝(即:所有前端)保持不变,所以我们只需要重新测试核心而不是前端。
我们正在尝试以这样一种方式制作一个模型,即所有对数据库的访问都以“封装”的形式进行,因此控制器不会访问该原则,而是访问反过来使用原则的“服务”。假设我们处理对象“cars”和“people”,那么控制器可以访问“cars_manager”服务或“people_manager”服务,从中执行所有必要的操作(创建对象、检索对象等)。
你会把同花跟注放在哪里?
示例(在伪代码中,以使其更易于阅读):
controller AjaxJsonAddDriverToCar( $CarId, $DriverId )
{
try
{
$Cars = getService( "core.cars_manager" );
$Car = $Cars->getCarById( $CarId );
$Car->addDriver( $DriverId );
$Result = JSON_OK;
}
catch
{
$Result = JSON_FAIL;
}
return $Result;
}
假设控制器不知道核心是如何实现的......它不应该得到学说并对其执行 ->flush() 。
欢迎灵感。谢谢。