Как бы вы реализовали шаблон дизайна «черты» -в C #?

Я знаю, что этой функции нет в C #, но PHP недавно добавил функцию под названием Traits , которую я сначала считал немного глупой, пока не начал об этом думать.

Скажем, у меня есть базовый класс с именем Client. Clientимеет единственное свойство, называемое Name.

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

Теперь приходит клиент А и говорит, что ему также нужно отслеживать вес клиента.Клиенту Б не нужен вес, но он хочет отслеживать рост. Клиент C хочет отслеживать как вес, так и рост.

С чертами мы могли бы сделать чертами как вес, так и рост:

class ClientA extends Client use TClientWeight
class ClientB extends Client use TClientHeight
class ClientC extends Client use TClientWeight, TClientHeight

Теперь я могу удовлетворить все потребности моих клиентов, не добавляя в класс ничего лишнего. Если мой клиент вернется позже и скажет: «О, мне очень нравится эта функция, можно мне ее тоже?», я просто обновлю определение класса, включив дополнительную черту.

Как бы вы сделали это в C #?

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

(Под «клиентом» я подразумеваю буквального человека, который нанял меня в качестве разработчика, тогда как под «клиентом» я подразумеваю класс программирования; у каждого из моих клиентов есть клиенты, о которых они хотят записать информацию)

48
задан Panagiotis Kanavos 9 September 2019 в 11:41
поделиться