Когда работа с объектами UI в Интерфейсном Разработчике является там каким-либо способом заблокировать положение объекта, после того как Вы довольны его размещением? Я только спрашиваю, поскольку я продолжаю немного перетаскивать объекты при выборе их для редактирований, приводящих к необходимости возвратиться и настроить положения.
Мне нравятся делегаты и события (они идут рука об руку) для разделения беспокойства (SOC).
Что такое делегат? Проще говоря, делегат - это подпись безопасного метода. События в основном хранят ссылку на коллекцию методов... События и делегаты предоставляют путь предоставлять уведомления об изменениях вне контекста нескольким потребителям...
Издатели вызывают события и подписчики получают уведомления.
Как это работает? Вот краткий пример.
Предположим, что перед обработкой заказа код должен быть действительным. В процедурном подходе ваш код (контролер) может инициировать метод «заказа». Затем заказ проверяет, а затем отправляет или отклоняет...
В подходе издатель/подписчик могут иметь следующие события OrderSubmended, OrderValidated и OrderRejected. Это ваши издатели. У вас есть несколько подписчиков, ValidateOrder, CommitOrder и ReaseOrder... ValidateOrder подписывается на OrderSubmited, CommitOrder подписывается на OrderValidated и, наконец, ReaseOrder подписывается на OrderRejected.
В качестве параметра событий вы проходите в порядке. Серия событий будет тогда...
Контроллер получает заказ. Код предполагает, что выполняется проверка NULL события...
void Init()
{
ValidateOrder += SomeValidateMethod;
CommitOrder += SomeCommitMethod;
RejectOrder += SomeRejectMethod;
}
void OrderReceived(Order o)
{
OrderEventArgs OEA = new OrderEventArgs(o);
ValidateOrder(this, OEA);
if (OEA.OrderIsValid)
CommitOrder(this, OEA);
else
RejectOrder(this, OEA);
}
Просто так, у нас есть некоторые события. Почему мы используем мероприятия/делегатов? Допустим, код отклонения заказа обновляет базу данных, без проблем. Кто-то говорит, давайте напишем клиенту, когда заказ будет отклонен. Нужно ли выполнить рефакторинг метода SomeReireMethod? Нет, можно просто создать новый метод EmailOrderRejected и добавить его как подписчика к событию ReaseOrder.
Это очень маленький пример, но он действительно помогает при использовании брокера событий для системы в целом. Это помогает разделить зависимости между методами...
Я постараюсь продолжить с некоторыми ссылками позже, удачи.
-121--2681500- Возможная проблема с этим заключается в раздутом преобразовании, которое генерирует устройство сопоставления образцов.
Вот перевод образца программы, сгенерированный с помощью scalac -print
. Даже -оптимизу
не удается упростить выражение , если (true) «» _ else выдают новые выражения MatchError ()
.
Большие совпадения образца уже генерируют больше байт-кода, чем допустимо для одного метода, и использование этого комбинатора может усилить эту проблему.
Если бы в язык были встроены &
, возможно, перевод был бы умнее. В качестве альтернативы, небольшие улучшения -оптимизы
могут помочь.
Выберите инспектор удостоверений ( Cmd 4 ) и выберите «All Properties» или «Localizable Properties» в меню Lock.