咨询下!

#1 water6000

通常我们把业务逻辑写到Controller中,而Model只负责和数据库打交道。但是随着业务越来越复杂,controller越来越臃肿,举一个简单的例子,比如说用户下订单,这必然会有一系列的操作:更新购物车、添加订单记录、会员添加积分等等,且下订单的过程可能在多种场景出现,如果这样的代码放controller中则很臃肿难以复用,如果放model会让持久层和业务层耦合。

请问。speedphp该如何处理呢?头一次用sp,感觉真的不错!:lol

2014-10-31 08:43:20

#2 jake

一般的建议是:复用的业务逻辑都放Model里面。

如果想避免“持久层和业务层耦合”,有两个方式:

1. Controller -> Model Class -> Model extendsspModel 也就是Model分开两类Class,一类是对接业务的,另一类是对接数据库的。这样就不“耦合”了。
2. Controller -> Model CLass -> spDB() 在业务逻辑Model内直接用spDB来对接数据库。

2014-10-31 09:55:38

#3 water6000

能举个例子呼?要是都放到控制端不知道可行否,不是说可以把control分成如干个control吗?:lol

2014-10-31 10:39:37

#4 jake

water6000 发表于 2014-10-31 10:39
能举个例子呼?要是都放到控制端不知道可行否,不是说可以把control分成如干个control吗? ...
其实代码放哪儿都行,不过你的提问是说“会复用”的代码,一般复用代码最好是放Model层。控制器可以有多个,但是控制器的代码大部分是一次性的。

2014-10-31 10:57:01

#5 water6000

分写控制端,不知道有例子吗?1)个方法没看明白,可否举个伪代码?另外,不知道,这么好的框架,是否还在维护和进行新的开发吗?

2014-10-31 11:06:48

#6 jake

1. 分开写控制器,就是建多几个控制器文件,参考入门教程
2. 第一个方法,大概是这样,假设有个Model是购物车Cart.php,然后对应数据库是cart。那么你要分开写,那么可以是

Cart.php
class Cart{
// 这里很多逻辑很多逻辑
// 这里的方法会使用lib_cart来访问数据库
}

lib_cart.php
class lib_cart extends spModel {
// 这里是数据库方法
}

也就是业务Model类不继承spModel,专门写全部的业务逻辑,里面调用数据库MOdel。
数据库的MOdel才继承spModel
这样不就分层了嘛

3. 框架有跟进。只是在稳定阶段,没必要乱更新博眼球。
{:soso_e173:}

2014-10-31 11:52:08

#7 water6000

太感谢了!研究过好多框架,发现,你的这个框架好像是最容易学的那种,就是比较担心会不再更新了!moonphp,fleaphp都已经倒下了!你的这个框架好像和他们应该是同时代的,能坚持下来真的很不容易。:lol

2014-10-31 12:49:19

#8 water6000

还有就是问下,用sp做大型的应用,不知道效率如何?在同等条件下的硬件水平下!

2014-10-31 12:52:06

#9 water6000

突然又想起一个问题,就是用spUrl生成的地址好像对seo不怎么友好吧,不知道可否生成这样的链接字符串形式/post/hello/1这样的形式。

2014-10-31 12:58:59

#10 jake

water6000 发表于 2014-10-31 12:52
还有就是问下,用sp做大型的应用,不知道效率如何?在同等条件下的硬件水平下! ...
会更好,因为sp是简化了很多的分层。比如说数据驱动层和抽象层是一起的,比起其他框架复杂度低很多,也就是能支持更高的负载。

另外可以看看手册里面关于优化加速相关章节。

2014-10-31 13:36:17

#11 jake

water6000 发表于 2014-10-31 12:58
突然又想起一个问题,就是用spUrl生成的地址好像对seo不怎么友好吧,不知道可否生成这样的链接字符串形式/p ...
看看手册关于“URLRewrite伪静态”

2014-10-31 13:36:52