## 如何使用 Service 模式? 若将商业逻辑都写在控制器,会造成控制器肥大而难以维护,基于SOLID原则,我们应该使用服务模式辅助控制器,将相关的商业逻辑封装在不同的服务,方便中大型专案的维护。 ### 商业逻辑 常见的如: * 牵牵到外部行为:如發送Email,使用外部API...... * 使用PHP写的逻辑:如根據購買的件數,有不同的折扣。 * 若将商业逻辑写在控制器,会造成控制器肥大,日后难以维护。 在中大型专案,会有几个问题: 将PHP写的商业逻辑直接写在控制器,造成控制器的肥大难以维护。 违反SOLID的单一职责原则:商业逻辑不应该写在控制器。 违反SOLID的单一职责原则:若未来想要改变折扣与加总的算法,都需要改到此方法,也就是说,此方法同时包含了计算折扣与计算加总的职责,因此违反SOLID的单一职责原则。 直接写在控制器的逻辑无法被其他控制器使用。 比较好的方式是使用服务。 将相依物件注入到服务。 在服务写PHP逻辑使用相依物件。 将服务注入到控制器。