Может ли метод проверить использование метода другим параметром? - PullRequest
1 голос
/ 18 мая 2019

У меня есть множество методов, которые используют объект конфигурации для заполнения заполнителей в шаблоне.Различные методы используют разные подмножества свойств объекта конфигурации.Мне бы хотелось, чтобы простой способ убедиться, что все свойства данного метода присутствуют в данном объекте конфигурации.

Сейчас у меня есть такой метод:

private static void ValidateConfiguration(CustomerConfiguration config, params string[] properties)

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

(я мог бы также обернуть String.Replace () в метод, который проверяет наличие нулей, но это менее забавно.)

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

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

Если вы создаете только один экземпляр свойства конфигурации, то свойства, которые ему нужно иметь, - это те, которые нужны.будут использоваться любым методом.Другими словами, если хотя бы одному методу нужно это свойство, тогда объекту нужно это свойство.

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

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

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

Чаще всего происходит следующее: у нас есть объект с множеством свойств, и мы используем только несколько из них, поэтому мы заполняем эти свойства ипередать объект в метод.Другие свойства являются нулевыми.

Затем, кто-то модифицирует этот метод, решает, что ему нужно другое свойство, поэтому он пытается использовать его, и они удивляются, обнаружив, что оно нулевое.Затем они должны вернуться и проследить, где был создан этот объект, и выяснить, что заполнено или нет.Это сбивает с толку и отнимает много времени.

Если поля не являются полностью необязательными и не имеет значения, заполнены они или нет, мы не хотим, чтобы мы смотрели на объект с множеством свойств и гадали, какие из них были заполнены, потому что отдельные методыкоторые создают объект "знают", какие свойства нужны другим классам или нет.

0 голосов
/ 18 мая 2019

Безопасный тип решения вашей проблемы - реализовать несколько интерфейсов с различными значимыми подмножествами свойств.Насколько я понимаю, наличие / отсутствие свойств в вашем случае зависит от типа объекта конфигурации и является динамическим.

вы можете использовать такую ​​подпись

ValidateConfiguration<T>(CustomerConfiguration config)

, где T представлять интерфейс и использовать отражение, чтобы перечислить необходимые свойства.Хотя было бы практически невозможно проанализировать код метода, чтобы вывести его использование структуры данных, отразить типы (для извлечения свойств) довольно легко.

...