该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-16
aardvark 写道 1)先说David的代码
不想再paste一遍了,请看Kase::close!,这里难道不是要更新kases表中的一个row吗? 再看ClosuresController::create,这里难道不是要在closures中创建一个row吗? 这不是两条SQL是什么? 我对这方面的争论有点失去耐心了,最后说一下。 上面已经说得很清楚,你非要把这2个扯到一块不知道有什么意义,任何情况下我们只需要其中一种做法,你要2种都用也可以,但在一个action里的一个事务内就可以完成了,不存在多个action完成同一个数据库事务,你见过这种实现吗? aardvark 写道 2)再说楼主的例子 假设说一个用户要阅读一篇文章,你是不是应该去调ArticlesController::show呢?那么Unreaded怎么得到更新? show里面可以处理Unreaded更新,代码就不用演示了吧。/articles/1/unreaded里面也可以处理,这是2种不同的做法。 从上面你发的这些内容,我觉得在RESTful面前,你把model和controller混在一起了。 |
|
返回顶楼 | |
发表时间:2006-12-16
qiezi 写道 aardvark 写道 1)先说David的代码
不想再paste一遍了,请看Kase::close!,这里难道不是要更新kases表中的一个row吗? 再看ClosuresController::create,这里难道不是要在closures中创建一个row吗? 这不是两条SQL是什么? 我对这方面的争论有点失去耐心了,最后说一下。 上面已经说得很清楚,你非要把这2个扯到一块不知道有什么意义,任何情况下我们只需要其中一种做法,你要2种都用也可以,但在一个action里的一个事务内就可以完成了,不存在多个action完成同一个数据库事务,你见过这种实现吗? aardvark 写道 2)再说楼主的例子 假设说一个用户要阅读一篇文章,你是不是应该去调ArticlesController::show呢?那么Unreaded怎么得到更新? show里面可以处理Unreaded更新,代码就不用演示了吧。/articles/1/unreaded里面也可以处理,这是2种不同的做法。 从上面你发的这些内容,我觉得在RESTful面前,你把model和controller混在一起了。 我仔细看了一遍,清楚了。原来他从28页的Kase到30页的Closure已经换了一种做法。因为两边的代码都不完整,放在一起倒像是完整的,就被误导了。这不,前面是Kase, KasesController,后面是Closure, ClosuresController,放一块儿就全了嘛(汗!) Model和Controller我还是分得清楚的。你大概是看我把Kase和ClosuresController并列才这么说,但我完全是从他的代码出发。他的save!写在Kase里,create!写在ClosuresController里,我也只好这样列举。 OK,回到楼主的例子。 没错,在show里面是可以做Unreaded的更新。但是那样的话,不恰恰违背了他搞出来一个Unreaded的初衷吗?另外一点,在ArticlesController::show里面加了对unreaded的更新,不还破坏了CRUD的一致性吗? |
|
返回顶楼 | |
发表时间:2006-12-16
aardvark 写道 没错,在show里面是可以做Unreaded的更新。但是那样的话,不恰恰违背了他搞出来一个Unreaded的初衷吗?另外一点,在ArticlesController::show里面加了对unreaded的更新,不还破坏了CRUD的一致性吗? 我觉得这算是个特殊的需求吧,就好像某用户浏览过某圈子,就设置一个状态表明他浏览过,无论在show里面怎么做,都违背了show的原意这与Unreaded本身没什么关系。我感觉这类问题还是要分开解释。show是一个GET动作,用来获取一个资源,Unreaded(或者改成Readed?)对象的创建是一个附加的隐藏动作,这个动作和show这个动作本身是密不可分的,而不是和其它什么资源,所以不宜分开。这也是为什么RESTful是用在controller而不是model,如果实际动作和model的CRUD这么吻合,干脆就直接把RESTful和model联系起来,去掉controller算了。 RESTful的确有些难以解释,用简单的东西去描述复杂的逻辑,总会有些碰撞,这也是讨论的原因。我最近看到的讨论来看,大部分人和我一样对这个概念还是有些模糊,希望多多讨论,理清这个概念。 |
|
返回顶楼 | |
发表时间:2006-12-18
浏览过或者没有浏览过,不应该影响资源本身,那应该仅仅是资源和人的关系的一种变化,我觉得这儿考虑做个两者之外的一个记录或者日志,当然,通过改变path来做日志不是不行,只是不好而已。应该肯定有更好的方式。
|
|
返回顶楼 | |
发表时间:2006-12-21
站出来说两句。先说楼主的例子。个人感觉可以用Restful实现。restful强调的是资源,即把关系提炼出来成更高的东西。
另外,DHH举的这个例子是说CRUD并不是一切。原因呢,用了Kase这个例子。其意思是说我们现在要 关闭这个Kase,但因为我们要保存一些历史数据,所以我们不能删除它,所以只能close.而这个Close就是不能用CRUD表达的。 仔细看录像。讲解得很清楚。 |
|
返回顶楼 | |