【面试】框架的整洁之道

目录

 

一、背景描述

二、借助前人的翻译

三、我的理解


一、背景描述

面试官前一天晚上给我发了一篇全英文的文章《Clean Coder Blog》让我第二天讲一下感悟。第一次接触这样的面试,心里没有底,那天晚上肝到1点写了一页的稿子,第二天6点就起床了,那时住地下室特别冷,根本不想起,还是坚持起床了,毕竟我还挺喜欢创业公司的。最后到答的时候紧张得一批,还是没有答好,但是面试官很nice,我也学了很多东西。

二、借助前人的翻译

一开始比较刚是自己翻译,后来在网上找到了译文,这对于我快速理解有很大帮助。《框架整洁之道译文》

三、我的理解

我第一时间想到的就是MVC和MVT两种模式,就应证了只一个整洁的框架的依赖规则,但是认为它是只是第3层接口适配层,框架的作用只是给数据库,模板搭建了沟通的桥梁。重点是去理解第一层和第二层,第一层是实体层,实体能被公司的不同业务逻辑部件使用,实体的具体表现形式是无所谓的,有这样特点的就是抽象函数和抽象类或者是数据结构,例如我有一个抽象的Person类,里面有一个抽象的eat方法,吃就是要完成的业务,第二层是把第一层的内容进行实现,就是指具体怎么去吃,是狼吞虎咽还是细嚼慢咽?用例层是在我们的软件中实现用例的位置,这些用例是由于软件用户希望实际上对基础域的实体“做某事”而产生的。例如一个示例可能是“客户将商品添加到订单中”。为了实现此用例和其他用例,需要使业务实体动起来的方法。第三层,往里走是业务往外走是页面,有点像是MVT的view,MVC的control,则处理传入的HTTP请求的控制器将位于接口层中,因为它们形成了HTTP服务器与应用程序层之间的接口。

举一个例子我第四层传进来的是applicationJson形式的数据{‘user_id’:1},但是我第二层需要的是一个user的对象,第三层的作用就是进行适配,把user_id转换成user对象,例如flask一个登录函数的post方法:

    def post(self):
        form = LoginForm(request.form)
        if form.validate():
            # 第4层传进来的信息
            email = form.email.data 
            password = form.password.data
            remember = form.remember.data
            # 第3层转换
            user = CMSUser.query.filter_by(u_email=email).first()
            # 第2层的check_password业务
            if user and user.check_password(password):
                session[config.CMSUSER_ID] = user.u_id
                if remember:
                    session.permanent = True
                return redirect(url_for("cms.cms_index"))
            # 第3层又传给第4层信息
            else:
                return self.get(messages="用户名或密码错误")
        else:
            messages = form.errors.popitem()[1][0]
            print(messages)
            return self.get(messages=messages)

所以可以拆出来放到login_check.py文件中,因为只有一个方法所以就不写成类的形式了。

from apps.cms.models import CMSUser
from flask import session, url_for, redirect
import config


def login_check(email, password, remember):
    """
    通过传进来的email查询user对象,查询到返回True
    :param email:邮箱 :type email:str
    :param password: 密码 :type password:str
    :param remember: 记住密码 :type: int
    :return: 判断结果 :type:boolean
    """
    user = CMSUser.query.filter_by(u_email=email).first()
    if user and user.check_password(password):
        session[config.CMSUSER_ID] = user.u_id
        if remember:
            session.permanent = True
        return True
    else:
        return False

而controler里的代码相应修改:

class LoginView(views.MethodView):
    def get(self, messages=None):
        return render_template("cms/cms_login.html")

    def post(self):
        form = LoginForm(request.form)
        if form.validate():
            email = form.email.data
            password = form.password.data
            remember = form.remember.data
            if login_check(email, password, remember):
                return redirect(url_for("cms.cms_index"))
            else:
                return self.get(messages="登录名或密码错误")
        else:
            messages = form.errors.popitem()[1][0]
            print(messages)
            return self.get(messages=messages)

以上是我的拙见,有什么意见Thanks♪(・ω・)ノ

Unyielding_L一直劝我不要发这篇文章,因为我的代码例子写的很烂,我在github上面搜到的flask电商项目也是把业务耦合到views里面,所以我觉得自己不是最烂的,最好就是有人抬杠,我才知道最后怎么写好这篇文章,Unyielding_L说你发布了就不要说是他审核的,好绝情的男人哦!

审核:lzq@Unyielding_L@Unyielding_L@Unyielding_L@Unyielding_L@Unyielding_L@Unyielding_L

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值