Как избежать повторения кода при реализации интерфейсов? [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как избежать повторения кода при реализации интерфейсов? [закрыто]

Сообщение Anonymous »


Итак, я столкнулся со следующей ситуацией:

У меня есть класс 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 этой функции.

Итак, есть ли способ сделать это проще? Или это лучшее, что я могу получить?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»