我希望有人能对我有所帮助,在我工作的公司中,他们希望我构建一个超级模块化应用程序,这意味着核心是非常简单和精简的系统,为此需要添加模块。 因此,最重要的是弄清楚CORE模块,它可以很好地扩展为各种模块。
我当时正在考虑创建具有模块化用法的MVC php框架。但是当涉及到如何添加将来被阻止的模块时,我是一名magento开发人员,我无法掌握模块的完成方式,所以我只是不想复制。
我应该遵循的任何建议或准则,谢谢
答案 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 OldUserSystem
或class NewUserSystem
,因为您有分隔层。
在普通MVC中,您必须直接调用用户系统并调用模型。
$Users = new User();
$CurrentUser = $Users->getCurrentUser();
现在,如果将class User
替换为其他内容,则使用相同的“名称”,“相同”方法调用卡住,或重写代码。侦听器的实现从视图中隐藏。也许用户系统调用此方法foobar
,听起来很荒谬,但是对于事件,您可以使其由该事件触发。
此外,如果未处理事件,则可以在调用方中告诉它并采取适当的措施,因为可能根本没有用户系统。还要由每个用户系统来呈现自己的页面,进行自己的路由等。
另一个很好的例子是计费。
有人在您的网站上购买商品,您是否使用Stripe,Paypal和Athorize点网。带有事件系统。您只需发出事件即可doPayment
将信息作为事件对象的一部分发送。而且任何列出的付款系统都可以处理。您可以更改付款系统,而无需动手处理任何事情。
等...
我会告诉你这不是一件容易的事。这是确定每个“插件”的责任,并让其仅执行那些事情的方式,而这是其他“插件”所看不见的。