Хобрук: Ваш путь к мастерству в программировании

Какой хороший шаблон для ситуации, когда какое-то свойство должно быть изменено одним способом внутри класса, а другим способом снаружи?

(Возможно, я преувеличиваю довольно простую вещь, но тем не менее.)

У меня есть элемент управления GUI с общедоступным свойством, которое содержит его текущее значение. Значение можно изменить изнутри разными способами — элемент управления довольно сложный, а также имеет дочерние элементы с разным поведением. При каждом таком изменении должен воспроизводиться звук и запускаться событие.

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

Итак, по сути, мне нужно использовать два сеттера: один для внутреннего использования и один для внешнего. Как лучше всего это реализовать, чтобы код был читабельным, а будущие сопровождающие случайно не перепутали их? (Очевидно, что они не смогут использовать приватный сеттер, когда им следует использовать общедоступный, но наоборот это может сбить с толку).

(В настоящее время я использую C#, но не думаю, что в этом вопросе есть что-то специфичное для языка, поэтому я опускаю этот тег.)

09.10.2013

Ответы:


1

Я предполагаю, что вы используете модель MVVM или MVC; это лучший способ разделить графический интерфейс и модель (логические элементы).

Лучшим способом было бы создать общедоступный метод для внешнего использования, который вызывает защищенный метод для внутреннего использования. Вся логика находится внутри защищенного метода. Однако, передавая логическое значение, решается воспроизводить звук или нет, например:

public void Set(...)
{
    Set(..., False); // False -> No play
}

protected or private Set(..., play = True) // Default: play sound
{
    if (play)
    {
        // Play sound
    }

    // Normal set behavior
}

Конечно, это не остановит вызов общедоступного набора изнутри... вы можете изменить общедоступный набор на более конкретное имя, например, SetWithoutSound, или, если вы не хотите, чтобы эта "функция" была указана напрямую, make четкий комментарий в общедоступном наборе о том, что частный набор следует использовать для внутреннего использования.

09.10.2013

2

Я бы предпочел иметь один метод установки и метод, который что-то делает (запускает уведомление) и изменяет значение через установщик:

public void set(Type value)
{
    _member = value;
}
public/protected/private void changeAndNotify(Type value)
{
    set(value);
    playSound();
}

Мне это нравится больше, потому что у вас есть сложный метод, который использует сеттер вместо сеттера, который использует сложный метод, который является лучшим дизайном, имхо. Кроме того, у вас нет условий для проверки, что делает его более понятным.

09.10.2013
Новые материалы

Управление DOM для чайников вроде меня
Одной из первых вещей, которую мы рассмотрели, когда начали изучать Javascript во Flatiron, была модель DOM. Кто он? Чем он занимается? Он больше машина, чем человек? Ну да довольно много. ДОМ..

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

мои январские чтения по программированию
Эрик Эллиот Программирование приложения JavaScript Эл Свейгарт «Автоматизируйте скучные вещи с помощью Python» Прогрессивное веб-приложение Google..

Создание ассоциаций секвелизации с помощью инструмента командной строки Sequelize
Sequelize - популярный, простой в использовании инструмент объектно-реляционного сопоставления (ORM) JavaScript, который работает с базами данных SQL. Довольно просто начать новый проект с..

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

Введение в машинное обучение для обнаружения аномалий (часть 1)
Тщательно созданный, тщательно спроектированный ресурс для специалистов по данным. Часть 1 Главы 03 из Руководства по машинному обучению для обнаружения аномалий Внимание! Прежде чем вы..

Начало работы с Pulumi в Digital Ocean
Цифровой океан (ДО) — отличная альтернатива многим другим поставщикам облачных услуг. DO предоставляет простой и понятный пользовательский интерфейс, упрощающий управление инфраструктурой и..