public function delete()
    {
        if (method_exists($this, 'notify')) {
            $notify = clone $this;
        }
        if ($this instanceof Undeleteable) {
            throw new Exception\Undeleteable($this);
        }
        $errors = [];
        foreach ($this->__adapters as $adapter) {
            if ($error = $adapter->delete($this)) {
                $errors[] = $error;
            } else {
                $adapter->markDeleted();
            }
        }
        if (isset($notify)) {
            $notify->notify();
        }
        $this->__state = 'deleted';
        return $errors ? $errors : null;
    }