楼主:
a88241050 (å†å›žé 已是百殘身)
2019-05-31 16:02:02最近工作上刚写了一支程式
当整个程式流程跑完
我总共需要insert和update7个table
然后我每次对table做操作都会透过ajax传
json物件呼叫controller的方法
每个controller再调用service的insert或update
所以我一个流程就会发送7次ajax需求呼叫controller
现在程式写完遇到两个问题
一个是程式执行时间有点久..
一个是若程式出错没办法把资料还原
后来有人告诉我我应该把全部流程包在一个controller的方法里
请问这样就能解决了吗?
还是应该写在service里?
作者:
cz75 (诀别的九月)
2019-05-31 16:19:00小弟也是菜鸡,提供一下我的想法,第一点互相没有影响的table也许可以用异步提高效率?第二点不晓得用transaction scope包起来有没有用
作者: lwtech 2019-05-31 16:47:00
呼叫七个是将逻辑切干净,你现在要呼叫七个就看你要在前端封装还是后端都可以,另外服务和controller应该是不一样的东西,很类似但服务是controller的封装层db慢你要自己会用工具看效能的部分,通常设定可以解决
作者: lwtech 2019-05-31 17:22:00
ajax 是 异步...
作者:
chocopie (好吃的巧克力派 :))
2019-05-31 18:06:00DB不要太频繁写入,不然日后还要再做优化,多一次工
作者:
pilor (Formosa)
2019-05-31 18:07:00db 写交易
听起来是要包transaction,但七次操作是分开的,可以先在前端暂存最后才打ajax吗?或是你要另外开一张暂存的db来储存这些操作的结果,最后才一次写入到要存的table
作者: puring0815 2019-05-31 18:48:00
有点模糊,每个步骤会依上个步骤结果有不同商业逻辑吗?出错就要还原,那出错的定义是什么?有可能只存四个资料表但是是代表成功?还是说要嘛没资料要嘛七个表都有资料?
作者:
pathy (pathy)
2019-05-31 18:50:00如果7次的操作是有相关性的,那用一次ajax比较合理另外如果第三步执行失败,前面已经执行过的两步改动要复原的话,整个7次操作要用transaction包起来,自己查下transaction的用法吧
作者: eateat33 (33来吃) 2019-05-31 19:56:00
整包包起来
作者: puring0815 2019-05-31 20:10:00
也同意可以先试试用包同一包ajax并用transaction处理
1次Request,7次操作比较合理,然后AP or db做transaction
作者: lwtech 2019-05-31 20:21:00
ajax 有 async,await, 七个你错哪一个你要去db 看...async 里的 sync,没 es6+ 就用 polyfill when,promise.
从你的描述看起来 这7张表的操作是属于“一个交易”所以发一个ajax去后端做整包的处理会比较好做 (失败处理透过orm的transaction机制rollback即可)
作者: ashlikewing 2019-05-31 21:15:00
这和MVC没什么关系,你没有搞清楚程式流程的主要目的
主要是你的流程要做什么 不是这做法普不普遍像有些网站的setting不需要存盘 只要更新就自动存盘就会有改一个字段就call一次api的做法但你又要还原rollback 就像一次更新整个form的七个字段call七次 一次失败就不存盘 那你可以直接改成一次送出整个form 不用分七次request 就逻辑设计的问题
作者: lwtech 2019-05-31 23:13:00
不然这样好了,我们九点开盘,九点零一收盘,大家节省时间
执行时间你可以开浏览器的F12看 如果是等response的时间太长 可能是后端有问题
作者:
sxy67230 (charlesgg)
2019-06-01 01:50:00理论上,不要去让View处理太复杂的逻辑,正确的作法都是把商业逻辑封装在service里面,controller不做逻辑,只负责流程控制。最后,善用sql语法、必要的时候做index加速query、大量资料记得用sql做分页,否则你会写出很肥的逻辑,人家一行就搞定了。
作者:
iansrc (Ian)
2019-06-01 10:49:00应该是一个方法包起来吧,在 API 里呼叫方法,AJAX 只要叫一次 API 就好。用 transaction 包那些 SQL (或是ORM) 语法,出错就会还原了
如果是用entityframework的话,只需呼叫一次SaveChange()就帮你搞定rollback问题了
作者: lwtech 2019-06-01 15:44:00
作者: reichs 2019-06-01 18:56:00
写一个stored procedure处理这7张table.
作者:
DendiQ (貔貅)
2019-06-01 21:39:00我猜你是不是把所有 db sql 操作都写在 client...?
作者:
ian90911 (xopowo)
2019-06-02 13:03:00asp.net MVC 要特别写出来
作者:
beau03 (beau)
2019-06-02 16:05:00各阶段用cookie将值加密暂存,最后再将cookie送后端或ajax使用者如prev上一步,直接由cookie复原画面字段值