2010-08-13 3 views
1

IssueJava Реализация: Обсуждение подхода Желаемой

Я хочу осуществить TransparencyChecker Interface, который будет проверять, что из любого обмена в сети всей торговой информации от других бирж доступна.

Q: Как TransparencyChecker Inferface реализовать?

Проблема Фоновые

Фондовые биржи решили поделиться торговой информацией друг с другом. Если один обмен хочет обмениваться информацией с другим обменом, то устанавливает исходящую сетевую ссылку для сброса всех транзакций. Сетевые ссылки однонаправлены, и обмен также разделяет транзакции, которые получили от входящих сетевых ссылок.

Код

interface Exchange { 

/** 
* Returns list of names of exchanges which receive all trading information 
* from this exchange. 
* @return list of exchanges 
*/ 
Set<String> getOutgoingConnections(); 

/** 
* Name of the exchange 
* @return name 
*/ 
String getName(); 
} 

interface TransparencyChecker { 

/** 
* Checks the transparency of the network. The network is the 
* collection of exchanges and each of them has a unique name. 
* @param exchanges list of exchanges in the network 
* @return true if all trading information is available for every exchange 
*/ 
boolean isTransparent (Set<Exchange> exchanges); 

} 
+0

В чем проблема? – thelost

+0

Ваш дизайн в порядке, насколько я могу судить. –

ответ

1

Проблема: Убедитесь, что все торговой информацией от других бирж является доступен

Есть несколько проблем, я собираюсь сосредоточиться на одном: «Вся информация доступна», но кратко, упомянем еще две проблемы

  1. Как мы узнаем, что означает «Все»? Каждой Бирже почему-то нужно выяснить, что другие exchnages, с которыми она должна иметь дело. В реальном мире этот список, вероятно, меняется день ото дня (различные обмены могут быть закрыты из-за государственных праздников) и час за часом из-за различий в часовых поясах. Поэтому получить список тех, кто должен быть там, вероятно, сложно.
  2. Что означает Exchange? По всей вероятности, у вас не будет одной машины, представляющей Exchange. Вероятно, достаточно, чтобы один из нескольких представителей Exchange был «доступен».

И приводит меня к основному вопросу: что означает «доступный»? Давайте просто сосредоточимся на ExchangeA и ExchangeB (если A и B согласны с тем, какие правила мы будем использовать, мы можем перейти к A-> C, A-> D, B-> C и т. Д.). Мы могли бы рассмотреть несколько разных значений для A доступен ли B: Может ли Ping B на сетевом уровне? Получил ли последнее сообщение (как последнее?) От B, может ли понять сообщение, полученное им от B? Возможно, B должен отправить несколько сообщений для описания своего состояния, получили ли мы их все? Являются ли сообщения разумными?

Я предлагаю, чтобы А мог определить доступность Б, получая сообщения от В через определенный согласованный интервал. Эти сообщения могут быть столь же просто, как

"Hello, I'm B, at 13:15 GMT on 21st January 2011, I am functioning correctly" 

или более сложный

"Hello, I'm B, at 13:15 GMT on 21st January 2011, I am about to send you my current status, 
it will comprise 3 messages including this one. Data XXX, YYY ..." 
"2 of three messages from B, at 13:15 GMT on 21st January 2011, Data XXYX, QQQ ..." 
"3 of 3 from B, at 13:15 GMT on 21st January 2011, Data PPP, QQQ ..." 

Теперь А имеет на то интерпретировать эти «Hearbeats». Предположим, что сообщения должны появляться каждые 5 минут, а один - не 8 минут - это плохо?Предположим, что одно сообщение промахивается, но все остальные доставлены? Предположим, что некоторые из них вышли из строя? Вы должны определить свои правила. Вы должны предположить, что сети имеют случайный сбой, небольшие задержки будут происходить.

Вслед за этим возникают различные вопросы, такие как, как B знает, чтобы сказать, что это доступно. Возможно, подход Pub/Sub подходит? Или должен быть какой-то центральный реестр, с которым разговаривают все exchnages, и каждый обменный вопрос просто спрашивает реестр «все ли?»

+0

@djna: Можете ли вы подробно рассказать об объяснении, это не ясно для меня. – Rachel

+0

@ Рейчел - на самом деле вам нужно, чтобы вы объяснили свой вопрос дальше. Является ли проблема «как я узнаю, что другие exchnages здоровы?» – djna

+0

Да. это верно. Как будет работать контролер Transperancy и как он может проверить, здоровы ли все сети, и вся торговая информация доступна для каждого обмена. – Rachel

0

Поняв Ваш вопрос будет:

мне нужна помощь в создании класса, который реализует интерфейс TransparencyChecker, я предложу следующий совет (это выглядит как академическое упражнение, а не работа проекта):

Начните с создания следующих двух классов:

public class NYStockExchange implements Exchange { 

} 

public class MyTransparencyChecker implements TransparencyChecker { 

} 

и компилировать.

Вы заметите, что получите ошибки, потому что не реализовали методы в любом из этих двух классов. Начните с внедрения getName() в NYStockExchange. Это должно быть легко, он должен просто вернуть строку, которая возвращает "NYStockExchange".

Скомпилировать снова. Вы заметите, что это один из методов, который необходимо реализовать. Промыть и повторить. Вернитесь с вопросами по конкретным методам, которые у вас возникают проблемы, и какова ваша точная проблема.

Смежные вопросы