Magento - 模块 VS 数据流

Posted

技术标签:

【中文标题】Magento - 模块 VS 数据流【英文标题】:Magento - Module VS Dataflow 【发布时间】:2011-04-01 04:49:41 【问题描述】:

我正在考虑 ---- 使用 Magento DataFlow 从数据库中提取信息以配合视频 CMS。

它可以节省开发时间 - 也可能不会。

它可能会更稳定 - 也可能不会。

问题变成了将视频系统作为不破解内核的模块紧密集成到磁电机中更好——还是直接查询数据库——释放在磁电机内核之外工作但仍与之交互的能力?

我必须从开发的角度和功能/日常使用/维护的角度来决定它是否更好

--

更新一:

“从你的帖子中不清楚这些数据最终会在哪里,或者你是否正在写入数据库等”

如果在 Magento 中作为模块完成,视频和播放列表将在管理员中配置。

它将是一种“媒体配置器”,可以接收多协议源(例如http://erlyvideo.org/files、aws cloudfront、wowza、任何服务器、brightcove、youtube 等) 并吐出/配置代码块(例如flash、html5视频、js、php)。这将通过粘贴代码/网址和/或上传内容来完成。

--

如果没有在 Magento 中完成,相同类型的事情将在另一个 CMS(自定义或类似 drupal 或 wordpress)中发生

--

我不确定必须发生的每一种可能的交互,但是 - 在媒体库中 - 有一个收藏夹系统、保存的会话、用户组权限、订阅内容 (vod)。

也将在商店页面和博客上提供单个视频实例:但交互仅限于提供视频。


更新二:

“Magento 在这种情况下的用途是什么?”

据我目前所知,保存的会话(任何用户)、收藏系统(登录用户)、保存的首选项(登录用户)、用户组权限(任何用户或登录用户 + 各种用户类型)。

但除了 VOD 实例,媒体库的用途是:

A.提供免费的视频剪辑。

B.让用户看到客户 DVD 产品的预告片。

似乎都不需要太多的互动。但是为了保持连续性,最好将所有东西都保存在一个由一个管理员配置的数据库中——不管它是出于必要还是为了方便而更紧密地集成。

但正如最初所说,也许在 db/store 之外可以实现更健壮/多功能或更稳定的独立性。也许后者是由那些真正不了解 Magento 或对其理解有一定限制的人推动的,因此建议分离。我不知道。

--

“除非视频与产品相关,否则没有理由将它们标记为产品。”

这对于刚才提到的预告片和免费视频很有意义。我想一个可能的例外是 VOD 视频或 VOD 视频组。在这种情况下,我假设您是说视频是一种特殊配置的产品可能会更好,除其他外,它恰好也出现在媒体库中?

在这种情况下,VOD、视频剪辑本身(或其容器)将是一种产品。除了拥有自己的产品页面(如果需要)之外,它还可以根据需要在任何地方进行预览、购买和放置。从代码的角度来看,这是如何“制造”的,这是个问题。

另一种可能不同的方法是这样的:(页面消失了) http://workbookproject.com/newbreed/2010/06/21/build-your-own-vod-portal/ 试试这个:http://filmutopia.typepad.com/lone_gun_manifesto/2010/07/how-to-build-your-own-vod-portal-in-a-matter-of-hours-for-less-than-100-lgm.html。用户实际购买页面访问权限的位置。

Zac 在他的网站和文章中做得很好,我可以看到 Magento 正在做这种事情,但是正如 Zak 在他的文章末尾指出的那样,他使用的是 Flash,所以我的解决方案是更进一步并以 HTML5 视频和/或 [任何协议] 提供。

所以我不知道 Magneto 是否会像 Zak 那样使用 WP 或其他东西来进行这种事情是否过于麻烦。

--

“可以在 Magento 中创建常规数据模型来包装数据库调用,如果视频和产品之间没有交互,则创建其中一个模型应该更干净。”

好的,我阅读了“Magento 中的数据模型”,但在本规范的架构中,我看不到它们与/物理组成的内容有关。

很明显,在 Magento 中做事的方法有很多。

DataFlow、数据模型、Magento 模块......哎呀......为什么不折腾小部件? :)

--

对此还有什么看法吗?非常感激。

【问题讨论】:

【参考方案1】:

作为一般规则,我强烈建议编写一个模块。 DataFlow 可能有点不透明,并且设计(如前所述)用于批量传输数据,而不是我认为您所要求的实时“事务”查询。

直接写入数据库将绕过 Magento 中存在的所有内置业务和数据层逻辑,这是有充分理由的 - 例如更新性能索引、检查 ACL 等。因此您应该使用 Mage::getModel('module/model') 方法进行开发。它还将为您提供大量convenience methods 用于选择、过滤、操作对象。

如果您编写自己的模块,您将更能够了解正在发生的事情、调试代码并观察更改的效果。使用moduleCreator 会给你一个很好的开端。

在您编写模块时,我建议您按照 Joseph 的建议将您的信息作为属性添加到相关产品中。 blog post 将引导您完成整个过程。

祝你好运! 京东

【讨论】:

伟大的观点和意义。我想知道随着这些论点的加入,这种想法会如何改变。 1. 构建高度集成的解决方案将需要更多的维护,因为它们会在每次升级时“破坏”和“破坏”magento。 2. 由于必须考虑网站的移动版本,如果使用 Sencha Touch 之类的东西来创建网站的 webapp,从完整和完整的 magento (带有建议的模块)或保留一个与 ST webapp 和 Magneto 交互的独立 CMS。 好问题。 1. Magento 模块系统是完全解耦的,这样可以降低升级损坏的风险,我建议 DataFlow 更有可能应用更改,而较少关注向后兼容性。 Varien/Magento 团队不会期望开发人员将面向客户的功能挂在 DataFlow 上。 2. 我对 Sencha Touch 没有任何经验(BTW 看起来不错),但作为一般原则,这种集成中移动的部分越少越好。如果可以的话,我建议您使用 Magento 作为您的 CMS。 与“ Magento as CMS ”有关如何最好地从磁电机向 ST 提供数据的任何想法?这个问题被问到ST团队,他们说:sencha.com/forum/showthread.php?107792-Plays-well-with-others 哈,听起来你需要一个用于 Magento 的 REST 服务器。我即将开始一个新项目来创建它。目前,外部 API 只能通过 SOAP 获得(并且所有报告都相当慢且有缺陷),但是之前已经创建了 AMF 接口(使用 Zend_AMF)。将 REST 序列化为 JSON 相当简单,因为有可用的翻译库,但创建一个广泛的面向客户的 REST 实现是一项艰巨的工作。您正在有效地重写 app/design/frontend/ phtmls 中的所有代码以输出 XML 而不是 XHTML。深呼吸! 您是否碰巧知道任何已经拥有此功能的网站(或类似的网站)【参考方案2】:

我不确定 Dataflow 是否是答案。数据流更像是一个 cron 导入/导出,非常适合大规模更新、导出到 ERP 之类的东西 - 如果您正在寻找实时数据,您将需要连接到 API 和提取你需要的信息,这看起来更实用,而且是实时的。就开发时间而言,您的时间投资也不算太荒谬。

【讨论】:

“挂钩 API 并提取您需要的信息”可能比数据流更接近,因为它是“实时的”。我会仔细看看 API【参考方案3】:

在大多数情况下,从令人头疼的角度来看,留在框架内(而不是破解数据库)是您最好的选择。如果可以,请创建一个处理交互并随意使用的模块(从您的帖子中不清楚这些数据将在哪里结束,或者您是否正在写入数据库等)。

当性能是关键时,例如当您有数千或数万条记录要提取时,使用该框架的例外情况。在这种情况下,从数据库中获取(和写入)数据库有时是唯一可行的选择。

希望有帮助!

谢谢, 乔


忽略其他功能(例如 cmets、收藏夹等。查找 Alan Storm 的关于将数据保存在数据库中的教程),将视频作为产品可以使用属性本身来完成,在这种情况下,所有数据都可以保留在 Magento 中(保存在管理员中,显示在前端)。这样,目录对象将为您与数据库进行调解,从而为您省去很多麻烦。

无论哪种方式,目前似乎都没有任何缩放问题,因此使用框架(主要信息的产品对象,为收藏夹创建自己的对象等)应该是完成此任务的好方法.


实际上,我在这里有点转身。 Magento 在这种情况下的用途是什么?除非视频与产品相关,否则没有理由将它们标记为产品。可以在 Magento 中创建常规数据模型来包装数据库调用,如果视频和产品之间没有交互,那么创建其中一个模型应该更干净。

【讨论】:

“从您的帖子中不清楚这些数据将在哪里结束,或者您是否正在写入数据库等”请参阅上面的“更新” “将视频保留为产品可以使用属性本身来完成”您是说每个视频都是一个产品,并且不需要为视频编写额外的 magento 模块吗? “Magento 在这种情况下的用途是什么?”更新二:以上

以上是关于Magento - 模块 VS 数据流的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义模块进行注册时,数据未插入到 magento 数据库中

Magento 的管理面板中自定义模块的数据包含在哪里?

magento结构解析

magento setdata 自定义模块

向 Magento 的订阅模块添加自定义字段

Magento2开发教程 - 如何向数据库添加新表