从头开始创建Moduler应用程序

时间:2018-09-08 00:20:04

标签: php magento model-view-controller module

我希望有人能对我有所帮助,在我工作的公司中,他们希望我构建一个超级模块化应用程序,这意味着核心是非常简单和精简的系统,为此需要添加模块。 因此,最重要的是弄清楚CORE模块,它可以很好地扩展为各种模块。

我当时正在考虑创建具有模块化用法的MVC php框架。但是当涉及到如何添加将来被阻止的模块时,我是一名magento开发人员,我无法掌握模块的完成方式,所以我只是不想复制。

我应该遵循的任何建议或准则,谢谢

1 个答案:

答案 0 :(得分:1)

我会使用(或正在研究)所谓的“ Emvc”(或“事件”和mini MVC)。

使用事件,基本上可以创建一个事件系统,将其用作中介程序(这是一种模式),您可以在使用中介程序的模式之间进行交谈。然后,迷你MVC基本上是逐个插件的。因此,每个插件都实现自己的MVC。

一些例子。

用户系统。 MVC的问题。你把那个系统放在

  app/contolers/user
  app/models/user
  app/view/user ..

例如,现在,当您要添加删除时,很难将其与MVC分开。

使用Emvc,您将以这种方式进行构建。

 app/plugins/user/contoller
 app/plugins/user/models
 app/plugins/user/views

然后,您将其注册到某些事件,例如它也侦听页面的请求事件。我也会听getCurrentUser之类的东西。这似乎很简单。但是发生的事情是你做这样的事

  //users bootstrap
 $Mediator->listen('GetCurrentUser')

 //called from some other plugin
 $Mediator->trigger('GetCurrentUser', $event)

然后,调解器检查该事件是否有任何侦听器,如果有,则将偶数对象交给他们。然后,侦听器将返回用户和已修改的事件对象。并且只要您有适当的接口。这是因为呼叫者不再关心用户来自何处。它可能来自class OldUserSystemclass NewUserSystem,因为您有分隔层。

在普通MVC中,您必须直接调用用户系统并调用模型。

  $Users = new User();
  $CurrentUser = $Users->getCurrentUser();

现在,如果将class User替换为其他内容,则使用相同的“名称”,“相同”方法调用卡住,或重写代码。侦听器的实现从视图中隐藏。也许用户系统调用此方法foobar,听起来很荒谬,但是对于事件,您可以使其由该事件触发。

此外,如果未处理事件,则可以在调用方中告诉它并采取适当的措施,因为可能根本没有用户系统。还要由每个用户系统来呈现自己的页面,进行自己的路由等。

另一个很好的例子是计费。

有人在您的网站上购买商品,您是否使用Stripe,Paypal和Athorize点网。带有事件系统。您只需发出事件即可doPayment将信息作为事件对象的一部分发送。而且任何列出的付款系统都可以处理。您可以更改付款系统,而无需动手处理任何事情。

等...

我会告诉你这不是一件容易的事。这是确定每个“插件”的责任,并让其仅执行那些事情的方式,而这是其他“插件”所看不见的。