So what's wrong with

set blendFactor(vec4 value) {
  _blendFactorRed = value.r;
  ....
}

The interface is simplified and we get the same footprint