[Dev] removed use of defaultValue in parcel XML
John Anderson
john at osafoundation.org
Mon Jul 19 12:17:13 PDT 2004
As the largest user of defaultValue in parcel XML, I decide to stop
using them for the reasons outlined below. While I was at it I removed
them in all the parcel XML. The change had no impact on startup time
(1:04 without a repository) (0:13 with a repository)
John
P.S. I noticed one semantic difference between defaultValue and
initialValue. A string attribute can have a default value of None and an
initial value can't
Katie Capps Parlante wrote:
> Hi all,
>
> We discussed initialValue and defaultValue back at the data model
> meeting in March:
> http://wiki.osafoundation.org/twiki/bin/view/Journal/DataModelMeeting20040311
>
>
> In particular, the apps team argued that the client of the repository
> (in this case, the application blocks code and content model) usually
> wants the value to be able to show up in queries, and wants to be able
> to modify the value if it is a mutable type (without modifying some
> shared value). We agreed that the apps team would use initialValue,
> and basically ignore defaultValue.
>
> I would argue that the client always wants the semantics of
> initialValue. One could imagine an optimization to initialValue, where
> a shared value is used until write (the item would get a copy in this
> case). Having two options with slightly different semantics is
> confusing, so I'd recommend that we don't expose defaultValue, and go
> ahead and make it an error in the parcel xml. If we find ourselves
> regretting this, we can always change it back.
>
> Cheers,
> Katie
>
> John Anderson wrote:
>
>>
>>
>> Andi Vajda wrote:
>>
>>>
>>> This proposal is a slippery slope, isn't it ?
>>
>>
>>
>> I'm a little confused why it's a slippery slope.
>>
>> In the past because of Katie's concerns, we agreed to use
>> initialValue instead of defautValue. I started using defaultValue
>> because it seemed more efficient, but evetually got bitten by
>> problems, which were the same problems Katie originally articulated
>> -- which I didn't fully understand. It seems like any benefits of the
>> current model don't out weigh the costs in complexity, so it seems
>> prudent to make sure nobody else falls into the same trap I did.
>>
>> John
>>
>>>
>>> Andi..
>>>
>>> On Sun, 18 Jul 2004, John Anderson wrote:
>>>
>>>> So Andi didn't go for getting rid of DefaultValue. Morgen, can we
>>>> make it an error to use it in parcel XML?
>>>>
>>>> John
>>>>
>>>> Andi Vajda wrote:
>>>>
>>>>>
>>>>>> As Andi notes below, if you modify an attribute with a default
>>>>>> value, and it's a mutable type, it will modify all items instead
>>>>>> of just this one item. This seems completely nuts -- and so error
>>>>>> prone that I can't ever imagine
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Well, you're re-phrasing this in a way that's not fair. No items
>>>>> are modified. Modifying a mutable defaultValue would make the
>>>>> value appear modified by all items that cause it to be returned
>>>>> but no items are actually modified since no item actually stores
>>>>> the defaultValue, except for the schema Attribute item.
>>>>>
>>>>> That's why the defaultValues of mutable type are marked readOnly,
>>>>> to prevent this very error from happening. The attribute is *not*
>>>>> marked readOnly, the actual mutable value is.
>>>>>
>>>>>> wanting to use it. As Katie pointed out to me there really isn't
>>>>>> a reason for both defaultValues and initialValues, except for an
>>>>>> optimization -- which the repository should hide from us anyway
>>>>>> and not expose as an api. So I propose
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> There is a semantic difference between defaultValue and
>>>>> initialValue that can be presented as such:
>>>>> - defaultValue prevents an AttributeError from being raised by
>>>>> returning a
>>>>> default value instead, owned by the schema
>>>>> - defaultValue really doesn't define an item's attribute value
>>>>> but a
>>>>> stand-in. I don't expect queries to return matched on
>>>>> defaultValues, for
>>>>> example. (Although it would be possible to do so, of course).
>>>>> - initialValue is a value copied into the item upon construction
>>>>> and that
>>>>> copy is owned by the item
>>>>>
>>>>> There is also the space/performance trade-off. It is not an
>>>>> optimization issue
>>>>> really, as defaultValue uses less space but takes longer to access
>>>>> (everytime, the defaultValue is fetched from schema), whereas
>>>>> initialValue uses more space but takes less time to access since
>>>>> the value is copied into the item upon creation. I should also
>>>>> point out, that liberal use of initialValue everywhere will slow
>>>>> down item creation and item commits as these values have to be
>>>>> written out upon save.
>>>>>
>>>>>> that we remove defaultValues from the repostory. And if Andi
>>>>>> doesn't go for it, perhaps Morgen could make the parcel loader
>>>>>> treat defaultValue as an error.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Which one you use depends on your usage patterns. For non mutable
>>>>> types, the choice is really simple. For mutable types, again, the
>>>>> choice should be simple too as the data model protects the values.
>>>>> If you know the attribute is not going to change, defaultValue
>>>>> should do. If you want queries to match on the values, then
>>>>> defaultValue is not a good choice. So, there are a number of
>>>>> decisions you could be making.
>>>>>
>>>>> If you don't want to use defaultValue, don't use it. If you can't
>>>>> imagine ever using defaultValue, then don't; asking everyone else
>>>>> not to, or worse, preventing everyone else from using it is a
>>>>> little iffy.
>>>>> I use it in the core schema and it works quite well.
>>>>>
>>>>> Again, there is no danger in using defaultValue, mutable values
>>>>> are marked readOnly by the data model, so changing a defaultValue
>>>>> is rather complicated and shouldn't happen by acciddent.
>>>>>
>>>>> There are semantic differences that should determine which one you
>>>>> want to use.
>>>>>
>>>>> Andi..
>>>>>
>>>>
>
More information about the Dev
mailing list