Re: CAY-400

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Mon Jun 15 2009 - 07:12:25 EDT

  • Next message: Andrus Adamchik: "Re: CAY-400"

    On Jun 15, 2009, at 11:49 AM, Aristedes Maniatis wrote:
    > I take your point, but I still think "DataMapElement" is more
    > descriptive. Every class in Java is an Object, so using that word as
    > part of the name conveys nothing, except that it is sort of a
    > generic multi-purpose thing. At least DataMapElement is clear and to
    > the point. And there is no reason why an Element can be used to
    > describe theDataMap itself. Slightly odd, but not too confusing.

    MappingElement then? Not tied to any particular class name and has no
    implied ownership.

    > Shouldn't we have a rigorous class hierarchy so that common code can
    > be kept in superclasses where they belong?
    >
    > I don't have the experience you do in creating java libraries meant
    > to be used by lots of people in different ways, but I can't see how
    > moving to interfaces for this one thing will help. If interfaces are
    > to be used, then perhaps the ultimate goal is that every 'data map
    > element' should be only an interface, allowing a user to swap in any
    > implementation they want without having to inherit from our classes.

    I don't insist on using interface here, rather I oppose a common
    superclass for .map and .query. Inheritance hierarchies can be tricky
    - it's way too easy to mix together unrelated things, based on a
    single coincidental shared property (no pun intended with "property
    API" being developed here). So my rule of thumb is that when in doubt,
    don't use a common superclass for the sake of elusive reuse of a few
    lines of code.

    In fact we probably don't need a common interface without code
    reuse: .map and .query can handle properties separately in their own
    hierarchies. For the sake of simplicity initially I would even ignore
    queries completely, and concentrate on the mapping elements.

    > If not, then I think this half way mixture of inheritance and
    > interfaces is confusing. There is already a mixture of the two I
    > find sometimes disconcerting.

    The current state of Cayenne is a result of evolution, not of a one
    time design, so there are some rough edges for sure.

    > * DataMapElement.Property inner class... Why is this an inner class?
    > It
    >> is exposed via public methods to the end users, so let's make it a
    >> standalone class.
    >
    > I thought inner class made sense here. The naming is convenient and
    > clearer: "DataMapElement.Property" rather than
    > "DataMapElementProperty" shows the fact that it is intrinsically
    > part of DataMapElement and not relevant as a "Property" outside of
    > that usage. This is just about naming and style, and the decision
    > based on what 'looked' right from the perspective of a user seeing
    > this class. You originally wanted just a Map<String,String> of
    > properties rather than a whole class, but I thought that this was a
    > way to capture more information in the future: properties might have
    > other attributes such as whether they travel to the client in ROP.
    > But really, they are just a slightly enhanced Map, so an inner class
    > seemed to capture that idea.

    This is just a matter of API style consistency - in Cayenne we do not
    have *public* inner classes at all. So I'd vote for
    org.apache.cayenne.map.Property.

    > Also if there is a notion of properties order in the
    >> element (is there?), I guess the property should be stored in the
    >> list. Do we care about properties ordering or simply displaying
    >> them in an alphabetic order is ok?
    >> I'd say alphabetic is ok. Any scenarios when the order might be
    >> important?
    >
    > I don't think order is important, so the CM can display it in
    > whatever order makes sense.

    If order is not important, and we don't have to store properties in a
    list as a result, we may not even need to store Property.key inside
    the property. To me a key is what a holder decided to name the
    property, not something that a property itself knows about.

    Andrus



    This archive was generated by hypermail 2.0.0 : Mon Jun 15 2009 - 07:13:03 EDT