2011-12-21 96 views
0

过去几个月,我一直在为一家公司工作,担任一般的开发人员/ IT人员。我为本地托管的公司编写了一个Web应用程序。我使用了CakePHP和MySQL(因为该应用程序非常适合Active Record方案)。我不应该使用CakePHP或MVC这个应用程序吗?

我正在使用的新网络应用程序将用于分析每月的销售数据。从本质上讲,我们得到的每月我需要分析信息的堆积如山的垃圾......


每个月我们获取数据的一个巨大的表中有我们的客户信息,每隔一个(他们的ID#,多少他们处理的数量,我们赚了多少,等等)。打电话给这个残差

我们还得到另一张表,基本上有他们的ID,一个“描述”(基本上是费用类型)和一个值。调用这互换

我有一个名为REPS永久表具有每个销售代表ID,姓名等


为了获取有用信息(如客户名称),我删除然后重新上载另一张表具有诸如他们的姓名,状态,状态(如果他们处于活动或关闭状态)等的信息......每月。

我决定制作一个残差表格,将月份记录为一列,我只是每个月添加一次。


我的问题是,使用CakePHP变得越来越困难。假设我想得到一张表,每个月和每个销售代表的列都有列,它开始变得非常复杂,因为这不是一个活动记录应用程序,我不得不做各种冗长复杂的查找语句。

您会建议更改为不同的框架,语言或数据库吗?我应该做什么数据库结构的改变?我的控制器不长,我是否应该将更多的工作转移到模型上?

任何想法?


编辑:我需要建立一个系统,我不是,因为技术的老板可以轻松地运行各种任何她想要的分析。


编辑#2:感谢您的答复。是的,我知道SQL查询很好,而且我开始只是做我自己的事情,但后来我重新构建了数据库并在此之后转换为Cake。

+0

我的建议是使用给你的老板一个专门的报告工具,如水晶报表和/或学习如何手动编写SQL查询来提取您需要的数据。 – jamieb 2011-12-21 04:50:25

回答

2

这是一个非常开放的问题,因此您不会得到完美的答案。我只能扔我的两美分,蛋糕没有调整为数据库应用程序。我的意思是任何不是简单的CRUD记录插入,检索,更新。 Cake DAL不能很好地扩展以适应复杂的查询或大容量数据插入/更新/操作。

话虽如此,CakePHP中仍然存在PHP。您可以使用模型的query方法发出“手动”查询。您应该在模型中创建方法,完成繁重的数据提取;这种代码是商业逻辑,不属于控制器。在模型中使用常规的PHP和SQL代码来处理数据。

如果这几乎只是您的应用程序所做的事情,您可能会更快乐,没有Cake,并且只需在您自己的数据库连接(如PDO)上使用一些简单的包装。尽管放弃了Cake的不错路由,表单和视图,所以你必须决定你喜欢花些时间。

+0

什么框架可以更好地处理数据库重度应用程序? – kaklon 2011-12-21 17:21:14

+0

我在这里没有具体的建议,但在数据库包装尽可能薄的地方。对于复杂的查询,你通常真的想手动编写SQL,而不必经过两层抽象。根据您的应用程序,像[klein.php](https://github.com/chriso/klein.php)与PDO和螺栓连接模板系统可能会很棒,否则就像Zend Framework,它允许您选择每个部分都非常灵活。 – deceze 2011-12-21 23:18:07

+0

谢谢你,会调查一下 – kaklon 2011-12-22 08:04:58

0

您是否考虑过其他框架?

Symfony(我使用1.4。*),例如,可以使用Propel作为它的ORM。 Propel的设计非常好,它使用了一个Query对象,使得从数据库获取数据变得非常简单。它也允许自定义SQL查询写入,如果你需要诉诸这一点。

要回答你的问题,即使你特别提到Cake PHP,它听起来像是“这是太多”的说法;如“对这个项目使用这样和那样的框架太多了”。就我而言,我更愿意使用我携带的框架来部署每个项目,并投入时间来真正了解。他们节省了我的时间,我不必在每个项目开始时都考虑基本的管道代码。

框架提供了很多工具(除了ORM),比如路由,验证等,它们在几乎任何项目中都非常方便,并且不会让它们真的会让你变慢。

我建议你看看其他选项,如果你觉得CakePHP变得笨重,因为我非常确定使用框架是正确的选择。

1

首先检查您的选项。你知道任何其他框架吗?你知道如何用你自己的MVC设置一个简单的PHP应用程序吗?框架中的很多组件可以独立地找到并添加到您自己的应用程序中(如活动记录,依赖注入,自动加载等等)

如果您当前使用的框架正在使您难以获取东西完成了,那么你应该考虑摆脱它。使用框架应该使事情变得简单而不难。关于CakePHP的一点是,它通过曼陀罗的'Convention over Configuration'来传递。尽管在一段时间内从某种程度上脱离某种新应用程序是非常好的,但它并不适合所有的应用程序。

因为我对你的项目了解不多,所以我不能真正帮你选择一个框架。但从我过去的经验来看,Zend Frameowork和CodeIgniter一直是最灵活的。采埃孚也提供了一个良好的CLI结构,以防万一您需要长时间运转的重型克伦。这就是说,只有在你真的需要/想要一个框架时才使用它们。

拥有真正复杂的控制器并不是一件好事。这可能表明您的模型没有做足够的工作,并且大部分转换都发生在您的控制器中。你的模型和你的观点应该做更大的工作。我通常瞄准薄控制器和胖模型。

0

我对你有好消息和坏消息。好消息是,你开始使用Active Record和CakePHP。坏消息是你的数据库结构不太好。

阅读一些关于Database Normalization的知识,了解如何规范化数据库和数据。

我看到的第一个问题是您为每个月添加一列。你真的应该有2个不同的表:

  • 1个月 - 这可以保持几个月的名称,如销售的当月总额为一体的公司一些超级汇总的数据
  • 1,这将是在REPS和几个月之间的数据透视表 - 在这里,您将持有代表ID,month_id以及可能与该代表当月销售额相关的一些信息。

最后你会有many-to-many代表和月份之间的关系。 ActiveRecord将会更加开心,MVC也是,而且开发人员会与你一起工作,因为这是应该如何完成:)

相关问题