数据库和视图有没有必要严格分离

2016-04-10 16:59:50 +08:00
 fifuygg

最近学 python ,在用 flask 写 blog ,发现了很多纠结的问题

比如如标题一样, db.session.commit() 这类的数据处理的代码,是放在 model 里面写一个方法然后在视图调用还是直接写在 view 里面?

题外话。。。 flask-bootstrap 这种插件比直接用 bootstrap 写一个 base 方便多少,感觉划算不来啊

2594 次点击
所在节点    Python
2 条回复
davidx
2016-04-10 22:20:08 +08:00
db.session.commit()应该放在 view 里, 这不属于 model 的操作
neoblackcap
2016-04-11 00:07:50 +08:00
db.session.commit()应该放在 model 层,这不属于 model 的操作,但这属于业务逻辑,是 model 层,不是 model

view 对应的是 MVC 中的 C ,应该只做 M 的匹配(路由)。

你定义的 model 跟 MVC 里面的 M 没有关系, M 是指 model 层,一个抽象的概念,那是业务逻辑处理的地方,当然你可以将所有业务逻辑放在你的各种 Schema 类里面(此处用 Schema 替代 Model 来指代用户定义的表结构类)。但你这样做又会严重违反了 SQLAlchemy 的设计方向,毕竟 SQLAlchemy 是 Data Mapper ,因此它本身就是为了将业务逻辑,跟 Schema 分离而设计成这样的,你不见你都是在用 db.session 正在做增删改查吗?

因此我建议你多写个 service 类,所有业务逻辑放里面,数据库操作放里面(db.session.commit()也自然放里面),充当 MVC 中的 M

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/269952

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX