V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
fifuygg
V2EX  ›  Python

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

  •  
  •   fifuygg · 2016-04-10 16:59:50 +08:00 · 2597 次点击
    这是一个创建于 3150 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    davidx
        1
    davidx  
       2016-04-10 22:20:08 +08:00   ❤️ 1
    db.session.commit()应该放在 view 里, 这不属于 model 的操作
    neoblackcap
        2
    neoblackcap  
       2016-04-11 00:07:50 +08:00   ❤️ 2
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2770 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:54 · PVG 17:54 · LAX 01:54 · JFK 04:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.