Если Помощник класса можно использовать при разработке нового кода?
===================================================================

Delphi 8 класса введен хелперы для целей картирования VCL / RTL к иерархии объектов .NET. Они позволяют инъекционные методы в существующий класс без переопределения класса или модификации оригинала. Более поздние версии Delphi нашли класс хелперы улучшилась, и они были перенесены на Win32.

В помощь он говорит: «они не должны рассматриваться как инструмент проектирования, которые будут использоваться при разработке нового кода.»

Помощники класса нарушают традиционные ООП, но я не думаю, что делает их плохо. Оправданно ли это предупреждение? 

Если класс хелперы использоваться при разработке нового кода? 

Используете ли вы их при разработке нового кода? 

Почему или почему нет?

За [комментарии Малькольма](https://stackoverflow.com/questions/354940/should-class-helpers-be-used-in-developing-new-code#355086) : Новый код означает ежедневную разработку приложений, где у вас есть какие - то 3 - библиотеки, существующий код, а затем код , который вы пишете. 

 

Зависит от того, что вы имеете в виду под «новым кодом». 

Они не очень актуальны для классов, которые вы недавно развивающихся, так и в этом случае нет, они, вероятно, не следует использовать. 

Но даже в совершенно новый проект, вам может потребоваться изменить существующий класс, который вы не можете изменить другими способами (VCL класса, класса третьей стороной, и т.д.). В этом случае, конечно, я бы сказал, идти вперед.

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

 

Перед тем, обнявшись классом помощников в качестве нового инструмента для фантазии коды, я думаю, вы должны понимать ограничения является включает. Существует возможно только обеспечить один вспомогательный класс для одного класса. Так что же произойдет, если вы предоставите класс помощник для своих классов, и ваши классы вытекают из общего класса, что некоторые другие предоставили вспомогательный класс для?

CodeGear представляет класс помощник как «рубить», чтобы предотвратить ломать вещи, а не как прохладная особенность дизайна. При разработке кода, его дизайн без класса помощников. Я знаю, что ты можешь. При работе с существующим кодом, который вы можете контролировать, использовать рефакторинг. Когда нет другого пути, тянуться класса хелперов.

То мое мнение так, как ...

 

Microsoft на основе LINQ сильно вокруг их методы расширения. В этом свете вы должны использовать класс хелперов в новом коде , если это улучшает ваш код. См [Какие хорошие использует для класса помощников?](https://stackoverflow.com/questions/253399/what-are-good-uses-for-class-helpers) для некоторых хороших целей.

 

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

 

Может быть, хороший Подход вы можете использовать (как я использую его): 

1. **Всегда отдавать предпочтение наследование** над классом помощников, использовать их только тогда , когда наследование не является вариант.
2. Дайте **предпочтение класса хелперов над голыми глобальными методами** .
3. Если вы будете нуждаться в функциональности extendend более чем единицы, попробовать что - то еще ( **как класс обертка** ).

.Net Удлинители методы слишком похожи , и где созданы и поддерживаются для точно того же причины: **Сделать Удлинитель базовых классов (а не обновление** которым в Delphi.NET не был вариантом для того , чтобы попытаться сделать Delphi родного кода вида из «совместимы» с .Net кода - имхо это слишком амбициозным)

Во всяком случае, **хелперы Delphi класса все еще довольно инструмент** в некоторых ситуациях.

 

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

Я один раз забыл параметризацию вещь, и если класс хелперы не существует в Delphi 2006 это будет стоить ПРЕОГРОМНОЕ МНОГО ВРЕМЕНИ ..... С класса хелперов, потребовалось 6 часов, чтобы сделать thigs работать правильно. НО, это была чрезвычайная ситуация - класс хелпер безвестной особенность языка и создают трудности для новых разработчиков, чтобы следить за потоком программы.

 

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

 

Я нашел [эту статью](http://www.gotw.ca/publications/mill02.htm) очень интересно. Она имеет дело с C ++ , но основные идеи не зависят от языка. Основная суть в том , что глобальные процедуры иногда preferrable методы даже в среде ООП. С этой точки зрения, есть меньше потребности в классе помощников.

 

Я нахожу их, используя все больше и больше как дизайн конструкции.

Ситуации, в которых я использую их:

* В настройках клиента / сервере, я расширяю общий базовые-классы с классом помощниками, чтобы обеспечить Сервер- или клиентом-только функциональность.
* В дополнение к классам VCL / RTL (и другой код третьей стороной) с удобными функциями оснастки.
* Чтобы обойти различия, когда классы не одни и то же дерево наследования (с помощью помощников позволяет иметь иметь общий граф и Items свойства, например).

На самом деле, я хотел бы Delphi принять несколько помощников для того же базового класса - я даже подал заявку на это, если я правильно вспомнить.

 

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