Представление в Oracle и в других системах баз данных является просто представлением SQL-оператора, который хранится в памяти так, чтобы это могло легко быть снова использовано. Например, если мы часто выходим, следующий запрос
SELECT customerid, customername FROM customers WHERE countryid='US';
Для создания представления используют команда CREATE VIEW, как замечено в этом примере
CREATE VIEW view_uscustomers
AS
SELECT customerid, customername FROM customers WHERE countryid='US';
, Эта команда создает новое представление, названное view_uscustomers. Обратите внимание, что эта команда не приводит ни к чему на самом деле сохраненному в базе данных вообще за исключением словарной статьи данных, которая определяет это представление. Это означает каждый раз запросы этого представления Oracle должна выйти и выполнить представление и запросить данные базы данных. Мы можем запросить представление как это:
SELECT * FROM view_uscustomers WHERE customerid BETWEEN 100 AND 200;
И Oracle преобразует запрос в это:
SELECT *
FROM (select customerid, customername from customers WHERE countryid='US')
WHERE customerid BETWEEN 100 AND 200
Преимущества использования Представлений
можно найти усовершенствованные темы в этой статье о" , Как Создать и Справиться с Представлениями в Oracle. "
Это кажется сложным подходом к проблеме.
Вы вызываете событие из клиентского приложения или вызываете события из службы с помощью контракта обратного вызова? или оба?
Я бы подошел к этому с помощью простого класса обслуживания в клиенте. Он может реализовать контракт обратного вызова, и для каждого метода обратного вызова он может просто вызвать событие Prism локально для любых подписчиков в клиенте. Если вам нужно инициировать события, которые обрабатываются службой, тогда класс службы может подписаться на эти события и вызвать службу wcf.
Все, что вам действительно нужно, это класс, который абстрагирует детали службы wcf от клиента. , и предоставляет интерфейс через события Prism.
Лично я бы не стал '
Это очень интересный подход. Я бы сказал здесь только две вещи:
Я думаю, что вы делаете это возможно. Глядя на вашу реализацию, мне действительно нравится, как вы об этом думаете.
Я хотел кое-что рассказать и посмотреть, что вы об этом думаете ... может быть, это немного повлияет на ваш дизайн. В частности, это сделано для того, чтобы обратиться к моему первому пункту выше и пойти еще дальше со строгой типизацией.
Рассматривали ли вы возможность реализации интерфейса службы на основе EventAggregator? Допустим, в вашем примере у вас есть служба WCF IWeatherService, с которой вы работаете. В настоящее время, насколько я понимаю, ваше использование будет выглядеть примерно так:
Почему бы не изменить это немного. Сделайте IWeatherService общим контрактом между всеми серверами и клиентами. Серверы будут иметь реальную реализацию, очевидно, но клиенты будут иметь реализации, поддерживаемые EventAggregator, которые переходят к центральному брокеру, который ставит в очередь и отправляет сообщения на серверы.
Напишите поддерживаемую EventAggregator реализацию IWeatherService, которая генерирует события для получения центральным брокером сообщений и передает эту реализацию в вашем контейнере для клиентов.
public ClientWeatherService : IWeatherService
{
IEventAggregator _aggregator;
public ClientWeatherService(IEventAggregator aggregator)
{
_aggregator = aggregator;
}
public void ChangeWeather(Weather weather)
{
ChangeWeatherEvent cwEvent = _aggregator.GetEvent<ChangeWeatherEvent>();
cwEvent.Publish(weather);
}
}
Оттуда, вместо того, чтобы использовать вашу «клиентскую библиотеку событий WCF» напрямую, они напрямую используют IWeatherService, не зная, что он не вызывает фактическую службу.
public MyWeatherViewModel : ViewModel
{
IWeatherService _weatherService;
public MyWeatherViewModel(IWeatherService weatherService)
{
_weatherService = weatherService;
}
}
Затем вы Мне нужно было настроить обработчик событий для выполнения вызовов WCF к реальной службе, но теперь у вас есть преимущество строгой типизации от клиентов.
Просто мысль.
Мне очень нравятся вопросы такого типа. Я бы хотел, чтобы больше людей задавали такие вопросы в Stackoverflow. Заставляет мозг двигаться по утрам: