Как избежать повторения кода при реализации интерфейсов? [закрыто] ⇐ C#
Как избежать повторения кода при реализации интерфейсов? [закрыто]
Итак, я столкнулся со следующей ситуацией:
У меня есть класс KitchenObject, внутри которого есть поле IKitchenObjectParent. IKitchenObjectParent — это интерфейс, который вызывает метод при каждом изменении KitchenObjectParent (когда родительский объект кухонного объекта меняется на другой, он вызывает этот метод для предыдущего и нового родительского объекта), а также другие вещи. OBS: у объекта кухни есть только один родительский элемент, но у родительского объекта может быть несколько объектов kichenObject.
Есть много способов, которыми один класс может реализовать этот интерфейс, но два из них очень часто используются в моем проекте: один подход — быть родителем, у которого есть только один кухонный объект, а другой — несколько. , они работают по-разному, но имейте в виду, что существует две распространенные реализации.
Теперь вот в чем проблема. Существует множество классов, реализующих этот интерфейс с помощью одного из этих подходов, поэтому, чтобы избежать повторения кода, я создал два класса, реализующие эти подходы (SingleKitchenObjectHolder и MultipleKitchenObjectHolder), и каждый раз, когда класс реализовывал IKitchenObjectParent одним из этих способов, это просто расширит один из этих двух.
Это оказалось очень плохой практикой и доставило мне некоторые проблемы. Например, существует класс Counter и два класса, производных от него: один использует подход SingleKitchenObjectHolder, а другой использует подход MultipleKitchenObjectHolder, но поскольку оба расширяют Counter, я не мог наследовать от только что созданных классов. Поэтому я перешёл на композицию и вместо расширения этих двух новых классов создаю их экземпляр и использую его. И это работает! Но я не знаю, лучший ли это способ, и это очень скучно. Например, если я хочу получить доступ к KitchenObject, связанному с CounterA, мне придется сделать что-то вроде CounterA.singleKitchenObjectHolder.kitchenObject, или мне придется создайте свойство KitchenObject внутри CounterA, которое возвращает singleKitchenObjectHolder.kitchenObject, но все равно это довольно скучно. Другой пример: если я хочу передать CounterA функции, которой нужен SingleKitchenObjectHolder, мне нужно передать CounterA.singleKitchenObjectHolder, мне бы хотелось просто передать CounterA этой функции.
Итак, есть ли способ сделать это проще? Или это лучшее, что я могу получить?
Итак, я столкнулся со следующей ситуацией:
У меня есть класс KitchenObject, внутри которого есть поле IKitchenObjectParent. IKitchenObjectParent — это интерфейс, который вызывает метод при каждом изменении KitchenObjectParent (когда родительский объект кухонного объекта меняется на другой, он вызывает этот метод для предыдущего и нового родительского объекта), а также другие вещи. OBS: у объекта кухни есть только один родительский элемент, но у родительского объекта может быть несколько объектов kichenObject.
Есть много способов, которыми один класс может реализовать этот интерфейс, но два из них очень часто используются в моем проекте: один подход — быть родителем, у которого есть только один кухонный объект, а другой — несколько. , они работают по-разному, но имейте в виду, что существует две распространенные реализации.
Теперь вот в чем проблема. Существует множество классов, реализующих этот интерфейс с помощью одного из этих подходов, поэтому, чтобы избежать повторения кода, я создал два класса, реализующие эти подходы (SingleKitchenObjectHolder и MultipleKitchenObjectHolder), и каждый раз, когда класс реализовывал IKitchenObjectParent одним из этих способов, это просто расширит один из этих двух.
Это оказалось очень плохой практикой и доставило мне некоторые проблемы. Например, существует класс Counter и два класса, производных от него: один использует подход SingleKitchenObjectHolder, а другой использует подход MultipleKitchenObjectHolder, но поскольку оба расширяют Counter, я не мог наследовать от только что созданных классов. Поэтому я перешёл на композицию и вместо расширения этих двух новых классов создаю их экземпляр и использую его. И это работает! Но я не знаю, лучший ли это способ, и это очень скучно. Например, если я хочу получить доступ к KitchenObject, связанному с CounterA, мне придется сделать что-то вроде CounterA.singleKitchenObjectHolder.kitchenObject, или мне придется создайте свойство KitchenObject внутри CounterA, которое возвращает singleKitchenObjectHolder.kitchenObject, но все равно это довольно скучно. Другой пример: если я хочу передать CounterA функции, которой нужен SingleKitchenObjectHolder, мне нужно передать CounterA.singleKitchenObjectHolder, мне бы хотелось просто передать CounterA этой функции.
Итак, есть ли способ сделать это проще? Или это лучшее, что я могу получить?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как избежать повторения подсказков типа при переоценке родительского метода?
Anonymous » » в форуме Python - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как избежать повторения подсказков типа при переоценке родительского метода?
Anonymous » » в форуме Python - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-