Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #18625
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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