数据操作写在哪比较合理呢?

#1 kk88

请问下:

1, 数据操作写在哪比较合理呢?SP的例子对数据的操作多是写在controller层里,而不是写在model里,这样是不是不大规范呢?但写在controller里却又很方便,不知这块有没有一个明确的规定呢?

2, 分页操作里为何没有一个显示函数呢?SP的分页类仅是操作分页数据,并没有一个供显示html的函数,每次分页都要写上一堆view,SP为什么不能内置一个呢?

2010-12-06 15:15:35

#2 jake

楼主提出的问题,是比较有启发性的。:handshake
为什么“看起来”很多数据操作都在C层完成,如find,findAll?
C层是交互作用的,所以它负责了“接收”提交数据(spArgs),然后再调用M和V的功能来做处理。SP的例子和说明中,调用的find/findAll等,都是M层提供的功能。也就是C层只是“调用”而不是“代替”了M层。
在简单的M层操作中,类似find/findAll等可以通过继承spModel实现的功能,当然是不需要再做数据处理,所以可以在C层直接调用,这也是为什么例子当作大部分数据操作都在C层实现的原因。
然而,在复杂的M层操作,或者说是复杂一些的业务逻辑,那么我们就要在M层进行封装、处理,然后再通过C层来调用了。如用户登录、注册的操作,类似winblog例子,都是放到M层里实现的。而C层做的,仅仅是输入数据和获取返回数据而已。

规定哪些数据操作是在M层完成,哪些是C层呢?
在Controller中完成的:
1. 简单的数据操作,用一到两行的代码即可实现的M层功能,如find之类的。
2. 提交数据的形成,对于提交的数据,做初步的处理,比如说日期控件提交有几个参数,把它们合并成数据库格式的时间。
在model中完成:
1. 直接的spModel的成员函数实现不了的(最直观的做法)。
2. 复杂的业务逻辑(超过两行代码),如注册、登录。
3. 重用地方较多的,如某个关联查询的数据是公用模板内调用的,在全站多个地方都使用到。那么需要把这些操作写到model内,封装起来方便重用。

2010-12-06 16:06:24

#3 jake

第二个问题,分页spPager是属于model层的,所以它不能够有直接显示或者返回HTML的方法,它仅可以返回“数据”。

如果开发者需要更方便地使用分页spPager,可以在模板内注册一个分页函数,这样就可以达到显示分页的效果了。这些HTML在SP本身是不能附带的(那已经不是SP框架的组成部分了),不过可以通过扩展或分享的方式得到。论坛里面有就一个24个样式的分页例子,可以直接拿到自己的项目中使用。
http://speedphp.com/bbs/thread-679-1-2.html

2010-12-06 16:09:58

#4 kk88

谢谢回复。
jake的回答让人每次都会有惊喜!

因我只用speedy,参照这个方法写个pageView函数也不错。

2010-12-06 16:24:28

#5 coolcool1265

一开始的时候我经常性的将M的东西写到C里面,后来看了一个样例,发现这样做是很有好处的,就开始慢慢修改了。

2010-12-06 22:18:40

#6 citywill

这是个古老的问题了。m应该是完整的数据对象,围绕该对象的所有的属性、行为都定义好,c只是页面逻辑层,要干什么直接调用m就行了。

2010-12-08 15:33:54