Re: Modification and deletion of data objects

From: sridhar devatha (devatha.sridha..mail.com)
Date: Thu Jul 23 2009 - 01:12:32 EDT

  • Next message: sridhar devatha: "Re: Modification and deletion of data objects"

    mike, transfer object design pattern might be a good example why I don't
    expose data objects in view layer. see
    http://java.sun.com/blueprints/patterns/TransferObject.html
    Then if i have to use separate objects (that is transfer objects) in view
    layer. How do you want me to do the conversion to and from business object?
    I have to include object id/ entity name in the transfer / view object to
    build business object. I don't want to do that.
    On Thu, Jul 23, 2009 at 10:10 AM, sridhar devatha <devatha.sridha..mail.com
    > wrote:

    > I can not use any data context, entity resolver, entity name and object id,
    > as I did not keep the data object. Keeping the reference to data object is
    > redundant, as data context is already maintaining them. Cayenne did not
    > provide a way for getting the registered data object using unique keys(not
    > primary keys! 99% of tables will have column(s) to uniquely identify a table
    > row.) I recommend to provide checkboxes to indicate the unique keys in
    > modeler. that way, a uniqueObject (it is somewhat similar to primary key
    > class in EJB. But, it does not use primary keys, only uses unique keys) can
    > be created using the unique columns related properties by the cayenne
    > modeler. This unique object can be used to retrieve the data object
    > registered with the data context(say lookupDataObject() or getDataObject()
    > in DataContext) by comparing one or more unique key related property
    > values. If there is no such registered data object, these methods should
    > make a data base call internally and get the data object of the matched
    > database table row. If neither data object nor the table row exists, this
    > method should return null or throw some exception.
    > By the way, I want to use DataObjectUtils.objectForQuery() as I did not
    > retain neither object id nor entity name of the data object(I don't want to
    > retain them in business object / view object.). I think this objectForQuery
    > will hit the data base instead of first looking in the data context. Is not
    > it? It is time to provide this functionality so that it can be really easy
    > to do basic crud operations using cayenne. When cayenne provides the methods
    > to get the list of new and modified objects. How come it does not provide
    > the basic method of getting the registered object? It is absolutely
    > surprising and shocking to me!!!
    >
    > About the mike's reply, caching or creating interfaces forces me
    > substantially to focus on technical things rather than on developement of
    > project functionality. I absolutely think retrieving the existing registered
    > data object should be very fundamental method of cayenne. Is not it?
    > Moroever, I would rather say that data context should take the burden of
    > removing data objects and overwriting the existing data object with the new
    > object that is getting created, if you don't provide methods for getting the
    > existing registered objects in the data context.There is a great reason not
    > to use the data object in business layer / view layer. Even if you use data
    > object in business layer, what should I send to view layer.How can I convert
    > business object to view object and vice versa without using context, entity
    > resolver,entity name and object id. I am involved in several projects where
    > data objects are not at all exposed to view or business layer. One purpose
    > of using business object is to insulate business layer from the internal
    > changes of data objects/ data access layer . same is the case with view
    > object.
    >
    > If you need any further info related to above things, ask me. I will be
    > available during weekends only.
    > Moreover, I am getting doubts about the declarative transactions. Do you
    > provide them?If yes , tell me how?
    > To sum up,
    > Please answer about not providing methods for getting the existing
    > registered objects from data context?
    > Please answer how objectForQuery() works?That is, whether it looks in the
    > data context before hitting the database.
    > Please answer about declarative transactions using a good example.
    >
    > thanks and regards,
    > sridhar
    > On Thu, Jul 23, 2009 at 12:48 AM, Mike Kienenberger <mkienen..mail.com>wrote:
    >
    >> No, but here's the two templates that are most relevent. This is
    >> probably against Cayenne 1.2 (2.0 with different package names).
    >>
    >> If they're helpful, great! If not, sorry, it's as-is at the moment --
    >> it's really not that difficult to come up with your own. I might have
    >> more up-to-date versions, but that's what's in front of me at the
    >> moment.
    >>
    >> On Wed, Jul 22, 2009 at 2:58 PM, Emanuele Maiarelli<evvdra..ahoo.it>
    >> wrote:
    >> > Did u made em public accessible? (sourceforge or kinda)
    >> >
    >> >
    >> >
    >> >
    >> > ________________________________
    >> > Da: Mike Kienenberger <mkienen..mail.com>
    >> > A: use..ayenne.apache.org
    >> > Inviato: Mercoledì 22 luglio 2009, 20:52:25
    >> > Oggetto: Re: Modification and deletion of data objects
    >> >
    >> > I wrote templates to generate interfaces as well as concrete classes
    >> > for entities.
    >> > It's been awhile since I looked at them, so I don't know if they're
    >> > suitable for public consumption.
    >> >
    >> > On Wed, Jul 22, 2009 at 2:36 PM, Emanuele Maiarelli<evvdra..ahoo.it>
    >> wrote:
    >> >> Hi agree with Mike, unless you have previous designed objects, i'd take
    >> DataObjects
    >> >> as business objects.
    >> >>
    >> >> If u get previous designed objects u could work on the package
    >> 'entities' implementing
    >> >> methods do adapt DataObjects to your needs. IDEs (at least NetBeans)
    >> got refactoring services
    >> >> that can help u extracting interfaces from your classes, quickly.
    >> >>
    >> >>
    >> >>
    >> >>
    >> >>
    >> >>
    >> >> ________________________________
    >> >> Da: Mike Kienenberger <mkienen..mail.com>
    >> >> A: use..ayenne.apache.org
    >> >> Inviato: Mercoledì 22 luglio 2009, 20:21:32
    >> >> Oggetto: Re: Modification and deletion of data objects
    >> >>
    >> >> I'm not aware of anyone else using separate objects for the business
    >> >> level. I use the DataObjects as the business level objects. Yes, if
    >> >> you decide to manually recreate data objects from business objects,
    >> >> there will be some overhead. If I had to go that route, I'd create a
    >> >> central management class and have it cache what objects I already know
    >> >> exist in the data context the first time I reference them rather than
    >> >> searching through the data context lists each time.
    >> >>
    >> >> One possiblity you could consider is to generate interfaces for your
    >> >> DataObjects and then pass the interface rather than the DataObject
    >> >> concrete class. This is what I tend to do in my projects. That way,
    >> >> you can hide all of the Cayenne-specific methods from your other code
    >> >> if you want. Other than some dependencies on Cayenne classes and a
    >> >> couple of other methods, there's not a lot of difference between a
    >> >> Cayenne data object and a "cayenne-free" business representation of
    >> >> the same data.
    >> >>
    >> >> On Wed, Jul 22, 2009 at 2:15 PM, sridhar
    >> >> devatha<devatha.sridha..mail.com> wrote:
    >> >>> andrus, it is not clear(thank for reply though), i have to try over
    >> weekend.
    >> >>> moreover, i can not use context, getEntityName in business object. I
    >> wrote
    >> >>> business object to data object conversion in data object class it
    >> self. so I
    >> >>> can use cayenne java api. I have to do it in the data object class
    >> which is
    >> >>> sub class _data object, as it will have reference of business object.
    >> But,
    >> >>> any way I am just surprised to see that there is no modification
    >> example
    >> >>> code. Nobody uses cayenne data object from view layer to
    >> business/service
    >> >>> layer to data access layer in web or enterprise applications(because
    >> it is
    >> >>> cayenne data object with several other sensitive methods available.
    >> even if
    >> >>> the methods are not there. I don't want to couple all the layers. ). I
    >> don't
    >> >>> want to expose that sensitive object. more concrete examples will make
    >> it
    >> >>> easier for new developers like me.
    >> >>> I think what Mike Kienenberger(thanks mike , that is what I am also
    >> thinking
    >> >>> at least. by the way what do you say about andrus reply) is telling
    >> may be
    >> >>> correct. then i have to go thru all the new and modified registered
    >> objects
    >> >>> in the data context to see if there is any thing existing. clearly
    >> this kind
    >> >>> of searching will make it difficult for every data object updation and
    >> >>> deletion. what do you say.
    >> >>>
    >> >>> On Wed, Jul 22, 2009 at 3:45 PM, Andrus Adamchik <
    >> andru..bjectstyle.org>wrote:
    >> >>>
    >> >>>> In your business object you will need to know 3 things to map it to a
    >> >>>> Cayenne object: entity name, id, state (new or already persistent).
    >> Then you
    >> >>>> can do something like this (pseudo code of course):
    >> >>>>
    >> >>>> X businessObject = ...;
    >> >>>> DataObject cayenneObject;
    >> >>>> Class cayenneObjectClass = context.getEntityResolver().
    >> >>>>
    >> getClassDescriptor(businessObject.getEntityName()).getObjectClass();
    >> >>>> if(bObject.isNew()) {
    >> >>>> cayenneObject = context.newObject(cayenneObjectClass);
    >> >>>> }
    >> >>>> else {
    >> >>>> cayenneObject = DataObjectUtils.objectForPK(cayenneObjectClass,
    >> >>>> businessObject.getId());
    >> >>>> }
    >> >>>>
    >> >>>> // merge fields...
    >> >>>>
    >> >>>> Hope I answered the right question.
    >> >>>>
    >> >>>> Andrus
    >> >>>>
    >> >>>>
    >> >>>> On Jul 22, 2009, at 7:47 AM, sridhar devatha wrote:
    >> >>>>
    >> >>>> Hi,
    >> >>>>>
    >> >>>>> I have view layer, business layer and data access layer. Each have
    >> >>>>> separate
    >> >>>>> class for carrying data. But, in data access layer, the object /
    >> class
    >> >>>>> used
    >> >>>>> for carrying data is respective data objects. I don't send these
    >> objects
    >> >>>>> beyond my data access layer. Rather I create business objects
    >> populated
    >> >>>>> with
    >> >>>>> data object data. When the business functions call data access layer
    >> for
    >> >>>>> any
    >> >>>>> of the CRUD operations, they pass these business objects. I convert
    >> these
    >> >>>>> business objects to data objects(So, I will create data object every
    >> time
    >> >>>>> I
    >> >>>>> need to convert business object to data object. So, what happens
    >> when the
    >> >>>>> two data objects(one dataobject is created while retrieving data. We
    >> send
    >> >>>>> the data as business object to business layer. one data object is
    >> created
    >> >>>>> when the user returns the modified data in the form of business
    >> object)
    >> >>>>> of
    >> >>>>> the same class exist with the same data? How can I modify and delete
    >> the
    >> >>>>> respective rows of these data objects? Please answer any body. I did
    >> not
    >> >>>>> find any example that does the modification.
    >> >>>>>
    >> >>>>>
    >> >>>>> Yours Sincerely,
    >> >>>>> Devatha Sridhar
    >> >>>>>
    >> >>>>
    >> >>>>
    >> >>>
    >> >>>
    >> >>> --
    >> >>>
    >> >>> Yours Sincerely,
    >> >>> Devatha Sridhar
    >> >>>
    >> >>
    >> >>
    >> >>
    >> >>
    >> >
    >> >
    >> >
    >> >
    >>
    >
    >
    >
    > --
    >
    > Yours Sincerely,
    > Devatha Sridhar
    >

    -- 
    

    Yours Sincerely, Devatha Sridhar



    This archive was generated by hypermail 2.0.0 : Thu Jul 23 2009 - 01:13:10 EDT