У Вас может когда-либо быть слишком много “защищенных виртуальных” методов?

Я использую ответ-нативная клавиатура-осведомленная прокрутка-представление .

Это, вероятно, будет работать:

import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';

<KeyboardAwareScrollView enableOnAndroid extraScrollHeight={pixels[50]}>
   <LinearGradient colors={['#72afd3', '#37ecba']} style={styles.container}>
          <TextInput placeholder='Hello World'/>
          <View style={{height: 200}}/>
          <TextInput placeholder='Hello World'/>
          <View style={{height: 200}}/>
          <TextInput placeholder='Hello World'/>
    </LinearGradient>
</KeyboardAwareScrollView>
15
задан abatishchev 14 June 2010 в 14:21
поделиться

5 ответов

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

Это все сказало, я думаю, что необходимо быть очень осторожными с определением методов как "защищенные виртуальный". Я соблюдал бы большую осторожность в определении методов как "защищенную виртуальный", потому что выполнение так не только объявляет возможность переопределения функциональности, но и до некоторой степени определите ожидание переопределенной функциональности. Это звучит мне как underdefined набор поведений для переопределения; у меня был бы четко определенный набор поведений для переопределения. Если Вы хотите иметь очень большой набор переопределяемых поведений, я изучил бы Аспектно-ориентированное программирование, которое допускает такую вещь очень структурированным способом.

9
ответ дан 1 December 2019 в 04:01
поделиться

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

Однако типы должны быть разработаны для этого вида расширения. Необходимо активно выбрать методы, где имеет смысл позволять пользователю изменить поведение. Если Вы просто хлопаете на виртуальном повсеместно, Вы рискуете разрушать целостность типа, она действительно не помогает пользователю понять тип, и можно представить много ошибок включая проблемы безопасности.

Я предпочитаю консервативный подход. Я отмечаю все свои классы с sealed если я конкретно не хочу включить наследование и в тех (небольшое количество) случаи, я только делаю требуемые методы виртуальными.

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

6
ответ дан 1 December 2019 в 04:01
поделиться

Моя точка зрения:

  • Если Вы можете пользователь events, его предпочтительное к protected методы.
  • Стараться избегать protected методы как возможные, если не возможный затем необходимо использовать его ;-).
2
ответ дан 1 December 2019 в 04:01
поделиться

Выбор protected private преднамеренное проектное решение. Вы заявляете, что Ваш класс явно поддерживает использование, которые функционируют со всеми издержками (усилие по разработке и реализации), который идет с этим. Я только использовал бы protected в тех ситуациях, где я знаю, что это необходимо, в основном потому что я делаю его сам. (Вы также найдете комментарии от разработчиков BCL в том же направлении как, что я сказал.)

virtual/non-virtual различие в производительности не важно на любой машине, которая достаточно мощна для выполнения Платформы.NET.

1
ответ дан 1 December 2019 в 04:01
поделиться

Нет, у Вас не может быть "слишком многих". Однако идея, что мы должны просто сделать каждый защищенный вместо частного или избежать "изолированный" любой ценой, просто глупа. Я сохранил бы "вспомогательные методы" и внутренние структуры данных частными.

0
ответ дан 1 December 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: