zoukankan      html  css  js  c++  java
  • Python Web 基础向(四) 浅谈数据层

    数据层一般会给人带来一些困扰,在于其定位不准确。聚合Model的工作也可以放在逻辑层做,但会导致逻辑层变重,经常出现大段晦涩代码。因此我的建议是保留Model聚合层,尽管会导致工作量的略微增加,但却可以使代码逻辑更加清晰,即每一层都只做自己该做的事。

    数据层可以不存在的理由在于逻辑层的业务聚合层已经做了类似的事。但区别在于,业务聚合层是以业务流程来划分的,而数据层则是更为细分的DB层上的聚合。

    举个简单的例子,业务中经常会涉及到活动,一方面活动有自己的各类配置,比如规则、奖励、周期等,一方面活动又和用户、订单相关,因此你的数据库中至少需要两张表来储存活动相关的数据,activity表来储存活动配置,activity_tracking表来储存活动预订单的关系等,你的model层也会相应出现ActivityActivityTracking对象。数据层的作用就在于此:将DB层中的多个同一抽象的model类聚合到一起,这样,逻辑层中将只会引用一个Activity的数据类。如果没有数据层,逻辑层中将引用这两个model层,并经常会在一个函数内对两个model进行操作,在业务逻辑复杂的情况下,逻辑层将变得臃肿不堪。

    这里要注意逻辑层聚合和数据层聚合的区别。ActivityActivityTracking虽然是两张表,但都记录着活动相关的数据,因此可以聚合到一个大专栏  Python Web 基础向(四) 浅谈数据层laintext highlighter-rouge">Acticity数据类中。而在活动的业务层中,聚合的范围则要大得多,可能会对用户、账户、余额、等级等多方面的东西都有操作,这是活动这一业务所决定的(之后会提到)。

    # data/student.py
    
    from my_project.models import auto_commit
    from my_project.models.student import StudentModel
    
    class Student(object):
    
        @auto_commit
        def insert_student(self, student):
            return StudentModel.insert(student)
    
        @auto_commit
        def update_student(self, student):
            return StudentModel.update(student)
    
        def mget_student_with_id(self, student_id):
            return StudentModel.mget_student_with_id(student_id)
    
        # ...
    

    (End)

  • 相关阅读:
    elk 介绍与logstash插件
    es 中文分词器IK
    Swift编译慢?请看这里,全套开源
    你与 “顶级iOS工程师” 距离有多远?
    iOS工程师如何在工作中提升自己?
    iOS技术人的出路在哪里,35岁被优化吗?
    菜鸟摇身变大牛
    iOS-MobLink集成流程
    iOS进阶之页面性能优化
    从零讲解 iOS OpenGL ES 的纹理渲染 原来是泽镜啊
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12361266.html
Copyright © 2011-2022 走看看