在学说与mySQL Enum,我读到:
Mysql Enum 原则2的类型系统由轻量组成,这意味着任何给定类型的实例都只有一个。此外,类型不包含状态。这两种假设使得使用Enum类型的MySQL变得相当复杂。
我喜欢用外行人的语言来解释它的含义。谢谢。
发布于 2015-08-09 11:00:56
原则2的类型系统由轻量组成,这意味着任何给定类型的实例都只有一个。
飞权类创建不可变的值对象。因此,在这种情况下,它们类似于String,
$String = "myString";这将创建一个字符串对象,不能更改该对象。对此的任何更改都会导致一个新的String对象。飞权类的相似之处在于,一旦通过构造函数创建了一个新对象,它就不能被更改,并且它持有相同的值。然而,Fly权重类最终比仅仅使用String更容易消耗。
模式有一些很好的示例,它使用了一个更大的CoffeeShop实现中的富来登类CoffeeFlavour的几种语言中的示例。这里有一个应该是PHP的例子,我很快就模仿了这个例子:
<?php
class CoffeeFlavour {
private $name;
function __construct(String newFlavor) {
$this->name = newFlavor;
}
public __toString() {
return $this->name;
}
}因此,CoffeeFlavour的每个实例都是自己的CoffeeFlavour,用于订单等。
此外,类型不包含状态。
为了详细说明上面的内容:类似于字符串,Fly权重类不能更改实例。一旦它被建造,它就是这样的。因此,在上面的示例中,字符串"myString“就是这样的。字符串中的任何更改都会导致创建一个新对象。
以CoffeeFlavour为例,改变咖啡的味道是非常荒谬的!这就是为什么看不到setName()方法的原因。换言之,见以下内容:
$caffeineCoffee = new CoffeeFlavour("Caffeinated");
$decafCoffee = new CoffeeFlavour("Decaf");你不可能说咖啡因的“状态”突然变成无咖啡因的。相反,你会创造一种新的独特的饮料。这就增加了它们的不可改变性。
当我点饮料时,我说:$myDrink = $caffeineCoffee;,因此引用羽毛重量类的对象。这些物体没有状态,它们只是,它们是什么。
另一方面,MySQL有一个列(类型),它有一个基于值列表的状态。因此,这直接与教条2的方法论相冲突。下文将作进一步阐述。
这两种假设使得使用Enum类型的MySQL变得相当复杂。
根据MySQL的文档https://dev.mysql.com/doc/refman/5.0/en/enum.html页面:
ENUM是一个字符串对象,其值是从表创建时列规范中显式枚举的允许值列表中选择的。
在这种情况下,MySQL列(类型)包含一个状态(它持有的是哪个允许的值)。这些值是在创建表时确定的,允许的值中的任何更改都需要对表进行删除和重构。但是,Fly权重类(如上面所示)很容易根据需要添加新实例。Flyweight类的每个类型(实例)都是唯一的,并且是不可变的。
因此,总结如下:
希望这能回答你的问题!
https://stackoverflow.com/questions/31902617
复制相似问题