多通道Yii2应用程序的建议目录/模块结构

问题描述:

我开始使用我的应用程序的基本应用程序模板来调度应用程序,它工作得很好。最初,它只适用于IVR,现在它开始添加多个通道(ivr,web,sms等)。每个通道都以不同的方式处理用户请求,并在请求的通道中传送请求,但所做的只是调度。所以,我从以下结构开始,多通道Yii2应用程序的建议目录/模块结构

backend 
common 
frontend 
    modules 
     ivr 
     web 
     appt 

对我来说,appt将成为核心模块,并将被所有通道模块使用。 ivr和web模块处理来自不同渠道的请求。如果有人要求申请,我如何将申请数据传递给申请模块并将申请的回复发回给用户?

如果它是一个没有模块的应用程序,它将是一个模型的实例并将表单收集的值分配给模型,验证它们,同时保存并在请求中发送响应。如果我的模块依赖于另一个模块来执行验证和其他业务逻辑,我该如何做到这一点?

任何人都可以阐明我的方法吗?我应该使用模块,并回到简单的单一应用程序结构?

编辑:

我的主要困惑是IVR是否应该作为一个模块或者它应该作为单独的应用程序作为后端,前端&控制台应用程序确实有Yii2先进的模板。我正在考虑的其他模块是订阅,脚本,通知器。一些模块对于所有渠道是通用的,而另一些模块是IVR专用的。

当我考虑'预约(appt)'作为模块并试图从web模块创建appt时,我被卡在如何实例化模型&检索错误消息。

我认为模块应该是耦合的,但对我来说,它似乎与其他模块紧密集成。你从以下几点建议什么?

  1. 每目的/特征为模块并且应该能够处理的请求/响应对所有信道(IVR,网页等)

  2. 每个通道应被投影为模块和应与特征模块交互。这是否过度压缩模块系统?

  3. 将IVR作为一个独立的应用程序,并在其中导入必要的模块并根据需要添加模块?

你的问题有点普遍性,因此不能给你一个确切的答案,但是Yii2可以通过多种方式传递信息。您可以将呼叫重定向到重定向,但我认为最好的解决方案是在模块应用中实例化您需要的服务。包括使用use ----\modules\ivr ...的正确名称空间,然后使用您需要的模块的最合适的方法。

对于要发送给用户的回复必须明显地返回以不同格式提供的信息,因此您必须留意每种渠道类型的正确格式,但是我已经成功地组织了您需要的不同表单你自己做出或专门适合的render/echo

回复

比起你我会记住以下几个方面:各个通道可能是单独的模块来强它们之间解耦。 集成问题以及各个组件之间的耦合问题,它将使用单个模块(appt)进行管理,该模块关心集成和协调用户请求,并将各种任务转达给通道的特定功能。

它还必须考虑通过适当的面向对象体系结构来管理各种功能的机会,该体系结构将允许进一​​步集中模块功能之间的协调操作,尤其是Creandio抽象通道,其中专用功能Common Channel与系统组件的关系)。

我特别感兴趣的是将IVR模块集中在一个模块上,这个模块与频道不同。当然它有一些固有的特征,但是试图在模块性同质方面更多地工作。

讨论仍然很广泛。我们应该更加具体地讨论互动和电信的需求,这将使我们成为客观的功能应用。 我希望这会有用

+0

谢谢你的回答,尽管问题本质上是通用的。我已经将我的方法限制在3个,我需要从中选择一个并编辑我的问题以添加它们。请建议。 – SenG

+0

我已经添加了一些其他考虑的答案。 – scaisEdge