REST API设计理念与 Python Mixin模式

REST API设计理念

REST核心概念.png
API设计共识.png
在线python解释器的api设计.png


Python Mixin模式

背景

民航飞机和直升机都是飞行器,又是交通工具,轿车也是交通工具,可是不会飞
能够多重继承,但这违背了继承必须是”is-a”关系javascript

不一样语言的实现方法

java

Java提供了接口interface功能,来实现多重继承java

public adstract class Vehicle {
}
public interface Flyable {
    public void fly();
}
public class FlyableImpl implements Flyable {
    public void fly() {
        System.out.printIn('I am flying');
    }
}

public class Airplane extends Vehicle implements Flyable {
    private flyable;
    public Airplane() {
        flyable = new FlyableImpl();
    }
    public void fly() {
        flyable.fly();
    }
}

如今咱们的飞机同时具备了交通工具及飞行器两种属性,并且咱们不须要重写飞行器中的飞行方法,同时咱们没有破坏单一继承的原则。飞机就是一种交通工具,可飞行的能力是是飞机的属性,经过继承接口来获取
python

Python

Python语言可没有接口功能,可是它能够多重继承。那Python是否是就该用多重继承来实现呢?是,也不是。说是,由于从语法上看,的确是经过多重继承实现的。说不是,由于它的继承依然遵照”is-a”关系,从含义上看依然遵循单继承的原则api

class Vehicle(object):
    pass
class PlaneMixin(object):
    def fly(self):
        print('I am flying')
class Airplane(Vehicle, PlaneMixin)
    pass

能够看到,上面的Airplane类实现了多继承,不过它继承的第二个类咱们起名为PlaneMixin,而不是Plane,这个并不影响功能,可是会告诉后来读代码的人,这个类是一个Mixin类。因此从含义上理解,Airplane只是一个Vehicle,不是一个Plane。这个Mixin,表示混入(mix-in),它告诉别人,这个类是做为功能添加到子类中,而不是做为父类,它的做用同Java中的接口。
使用Mixin类实现多重继承要很是当心工具

  • 首先它必须表示某一种功能,而不是某个物品,如同Java中的Runnable,Callable等
  • 其次它必须责任单一,若是有多个功能,那就写多个Mixin类
  • 而后,它不依赖于子类的实现
  • 最后,子类即使没有继承这个Mixin类,也照样能够工做,就是缺乏了某个功能。(好比飞机照样能够载客,就是不能飞了^_^)

ReactJS

var PlaneMixin = function() {
    return {
        fly: function() {
            console.log('I am flying');
        }
    }
}

var AirplaneComponent = React.createClass({
    mixins: [PlaneMixin()],
    render: function() {
        return '<h1>what's mixin<h1>';
    }
})
相关文章
相关标签/搜索