Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #18625

Re: Wormholes

From Wanja Gayk <brixomatic@yahoo.com>
Newsgroups comp.lang.java.programmer
Subject Re: Wormholes
Date 2012-09-09 13:55 +0200
Organization Netfront http://www.netfront.net/
Message-ID <MPG.2ab6a2062456245b989733@202.177.16.121> (permalink)
References <0ska4895k2mp2j5fb5p4qnue7lsbdpoeoo@4ax.com> <k23nn7$urk$1@dont-email.me>

Show all headers | View raw


In article <k23nn7$urk$1@dont-email.me>, eric@invalid.com says...

> >I wondered if anyone had thoughts on ways of tackling such a problem.
> 
> Having a long chain of intermediate calls sounds like a bad idea, lots of 
> coupling. Can you refactor to get rid of or at least prune the chain?

Let's see, you need to get Information from A to C:

The Law of Demeter incompliant naive solution:

class A{
 private B b = new B();
 {
  b.getC().setValue("hello world");
 }
}

class B{
 private C c = new C();
 C getC(){return c;}
}

class C{
  private String value;
  void setValue(String v){c.setValue(v);}
}

Problem: if you change C, you need to change A aswell, eveb though these 
should not be closely related.

LOD-compliant naive solution:

class A{
  private B b = new B();
 {
  b.setValue("hello world")
 }
}

class B{
  private C c = new C();
  void setValue(String v){c.setValue(v);}
}

class C{
  private String value;
  void setValue(String v){c.setValue(v);}
}

The only difference with the previous is that B won't leak its internals 
to A, so you could change C without affecting A, by putting some 
conversion code to B.

You could use a visitor too:

class Visitor{
 private String value;
 Visitor(String value){this.value=value;}

 void visit(C c){
  c.setValue(value);
 }
}

class A{
 private B b = new B();
 {
  b. accept(new Visitor("Hello World"));
 }
}

class B{
 private C c = new C();
 accept(Visitor v){
  c.accept(v);
 }
}

class C{
 private String value;
 accept(Visitor v){
  v.visit(this);
 }
}

This way your can change C without having to change A or B, by adding 
some conversion code to the Visitor.

The third thing you could do is send Messages over a central message 
bus, that every class may listen to:

interface MessageBusStop{
 void stop(Bus bus);
}

abstract Message{
 private Object id;
 private Object payload;
 Message(Object id, Object payload){
  this.id=id;
  this.payload=payload;
 }
 boolean isMessageId(Object id){this.id.equals(id);}
 Object getPayload(){return payload;}
}

class A{
 Bus bus = Application.getMessageBus();
 {
 bus.sendMessage(new Message(Messages.NEW_TITLE,"Hello World"));
 }
}

class C implements MessageBusStop{
 private String s;
 private Bus bus = Application.registerNewMessageBusStop(this);

 void stop(Bus b){
  if(b.isMessageId(Messages.NEW_TITLE)){
   s = (String)bus.peekMessagePayload();
  }
 }
}

Problem is that a single message may involve a lot of classes to see if 
they are responsible to handle the message, but there are possibilities 
to make the central bus only stop at those classes interested in certain 
IDs or certain types of IDs, so this concept is pretty nice.
The problem there is with many objects reactibng to messages that you 
have to make sure that the order in which objects react to messages is 
not crucial.

Kind regards,
Wanja

-- 
..Alesi's problem was that the back of the car was jumping up and down 
dangerously - and I can assure you from having been teammate to 
Jean Alesi and knowing what kind of cars that he can pull up with, 
when Jean Alesi says that a car is dangerous - it is. [Jonathan Palmer]

--- Posted via news://freenews.netfront.net/ - Complaints to news@netfront.net ---

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Wormholes Roedy Green <see_website@mindprod.com.invalid> - 2012-09-03 18:12 -0700
  Re: Wormholes eric@invalid.com (EricF) - 2012-09-04 02:06 +0000
    Re: Wormholes Roedy Green <see_website@mindprod.com.invalid> - 2012-09-04 10:08 -0700
    Re: Wormholes Wanja Gayk <brixomatic@yahoo.com> - 2012-09-09 13:55 +0200
  Re: Wormholes Arne Vajhøj <arne@vajhoej.dk> - 2012-09-03 22:34 -0400
    Re: Wormholes Stuart <DerTopper@web.de> - 2012-09-04 12:15 +0200
  Re: Wormholes markspace <-@.> - 2012-09-03 21:00 -0700
    Re: Wormholes Robert Klemme <shortcutter@googlemail.com> - 2012-09-04 07:08 +0200
  Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-04 08:47 +0200
    Re: Wormholes Lew <noone@lewscanon.com> - 2012-09-04 03:10 -0700
      Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-04 16:09 +0200
        Re: Wormholes Gene Wirchenko <genew@ocis.net> - 2012-09-04 08:34 -0700
          Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-04 17:46 +0200
            Re: Wormholes Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-09-04 09:31 -0700
        Re: Wormholes Lew <lewbloch@gmail.com> - 2012-09-04 11:14 -0700
        Re: Wormholes Arne Vajhøj <arne@vajhoej.dk> - 2012-09-04 19:59 -0400
    Re: Wormholes Roedy Green <see_website@mindprod.com.invalid> - 2012-09-04 13:20 -0700
      Re: Wormholes Arne Vajhøj <arne@vajhoej.dk> - 2012-09-04 20:00 -0400
      Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-05 09:01 +0200
      Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-05 09:02 +0200
      Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-05 09:02 +0200
        Re: Wormholes Zermelo <zermelo@teletu.it.nospam.invalid> - 2012-09-05 09:03 +0200
      Re: Wormholes markspace <-@.> - 2012-09-05 17:34 -0700
  Re: Wormholes Steven Simpson <ss@domain.invalid> - 2012-09-04 14:18 +0100
    Re: Wormholes Robert Klemme <shortcutter@googlemail.com> - 2012-09-05 21:51 +0200
      Re: Wormholes Steven Simpson <ss@domain.invalid> - 2012-09-05 23:26 +0100
        Re: Wormholes Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-09-06 09:32 +0000
          Re: Wormholes Steven Simpson <ss@domain.invalid> - 2012-09-06 11:47 +0100
            Re: Wormholes Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-09-06 15:10 +0000
              Re: Wormholes Steven Simpson <ss@domain.invalid> - 2012-09-06 20:12 +0100
                Re: Wormholes Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-09-06 21:08 +0000
  Re: Wormholes Nigel Wade <nmw@ion.le.ac.uk> - 2012-09-04 17:26 +0100
  Re: Wormholes Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-09-04 09:28 -0700
  Re: Wormholes David Lamb <dalamb@cs.queensu.ca> - 2012-09-04 16:54 -0400

csiph-web