Sus*_*ha7 7 php oop codeigniter service-layer
以下是在CodeIgniter应用程序中实现服务层的两种方法.
1.send request to the controller
2.calling service layer methods from controller
3.return processed result data set(D1) from service layer to controller
4.then according to that data set controller demand data from model
5.model return data set(D2) to the controller
6.then controller send second data set(D2) to view.
Run Code Online (Sandbox Code Playgroud)
第二种方法
1.send request to the controller
2.calling service layer methods from controller
3.service layer demand data from model
4.model send requested data set(d1) to the service layer
5.after some processing return generated data(d2) to controller from service layer
6.then controller send data set(d2) to view.
Run Code Online (Sandbox Code Playgroud)
在CodeIgniter中实现服务层的正确方法是什么?除了这两种方法,还有其他好方法吗?
如果你能在Code中提供一个例子,它会很棒
Jim*_*mbo 10
请注意,这不一定是正确的方法,但是我将解释一个类似的框架通常如何做,然后你可以了解其他方法,并为你的用例决定最好的方法.因此,我不认为这个答案是正确的答案,但我希望它至少能够提供一些关于事情如何完成的知识,然后才会真正知道他们所谈论的内容并且会进入(并对那些人 - 请随时编辑/关注此答案:D).最后,这也与CodeIgniter无关,而与一般的框架无关.您的问题不仅应该与框架无关,而且与语言无关.
所以我将在这里提供一个意见,这是因为所有现代框架,特别是在PHP中,都没有做MVC.为什么这很重要?因为我们都需要说同一种语言,PHP中不存在'mvc'.这是事实.接受这一点,然后我们可以继续推进框架使用的概念的混合; 和CodeIgnitor是'MVC'混蛋的一个特别好的例子; 此后称为带有引号的"mvc".
好的一面是,像Symfony这样的框架提供了一个初始的自以为是的架构,至少在整个应用程序中包含某种形式的一致性,它是这样的:
一个标准的HTTP请求进入并命中前端控制器,通常app.php或app_dev.php取决于您是否在开发或生产; 一个涉及需要在每个更改上运行的大量缓存而另一个不需要 - 这对于开发来说是完美的.
路由器将当前url与控制器类和该类中的"action"(方法)进行匹配.
框架的依赖注入部分指出从控制器到模型层和返回所需的所有对象,并在需要时实例化或准备实例化它们.
控制器使用任何所需的依赖项进行实例化,并执行相关方法.这通常是您开始开发并将代码"挂钩"到框架中的地方.
这是您决定架构的地方,但是,从开发人员的角度和业务角度来看,最重要的是(为了降低未来维护成本)是一致性.
我个人更喜欢确保我的代码与框架分离.我将从请求中获取的标量传递到应用程序层服务,该服务使用模型层中的对象(通过DI传入)来使用域对象.这里的要点是域对象不是直接传递给控制器,它们是通过应用层介质代理的,所以理论上你可以替换围绕它的整个框架,你需要做的就是将这些标量传递到这个层在它们到达模型层之前它们仍然可以工作(想想CLI调用,不再需要控制器).
应用级服务使用任何需要的Repositories,Services等(然后将这些标量放进去,记得分离?),其执行业务逻辑,(通常这些都是在您的设计模式进入的某一天到一天的基础上播放),然后将该数据返回到应用程序级服务.
然后服务将数据返回给控制器并猜测是什么?这是框架往往搞砸的地方!因为在今天的框架中没有"视图"的概念.只有一个模板,您将该数据传递给模板,然后将其传递给模板.因此,在您的图表中,绝对没有视图的概念,因为事情并非如此.说实话,我仍然使用模板,因为它们是最快的做事方式,但是在现代框架将它们放在一起并实际开始使用视图之前,我们运气不好并且在面对时必须保持坚定事实上有些人(比如Laravel)将自己称为"mvc"框架.
请注意,Fabien Potencier明确指出Symfony不是MVC框架 - 至少他知道他在那里谈论什么.同样,这不是纯粹的,重要的是我们在计算中都说同样的,事实上正确的语言.
所以,因为你非常喜欢图表,所以有些人可能会在今天的框架中做到这一点......
这是有一个概念的应用Review,并Criteria为每个Review.甚至不让我开始使用Symfony表单,它们与所有它们都不是任何架构的重要组成部分.
你需要多少层?我们已经有了"MVC",在DDD中我们有"应用程序","域"和"基础架构"分离的概念,所以先把这两个一起工作,然后这个"服务层"?你真的需要另一层,还是足够上面?需要考虑的事情......
请注意,由于这种分离,您不会遇到框架/ http请求以使应用程序运行.
请参阅上图中的"服务"?它们与控制器分离,因此您可以从任何地方抛出标量,应用程序仍然可以工作.我认为这将为您提供所需的分离.以正确的方式做事,学习如何做,然后学习如何控制自己,并在业务及其需求方面务实,这是很棒的,但框架需要对他们的东西进行排序 - 你当然不会用CodeIgniter编写可爱的代码;)