вспомогательные функции как статические функции или процедурные функции? - PullRequest
0 голосов
/ 03 мая 2010

Интересно, нужно ли создавать вспомогательную функцию в классе как статическую функцию или просто объявить ее как процедурную функцию?

Я склонен думать, что статическая вспомогательная функция - правильный путь, потому что тогда я могу видеть, к примеру, какая это вспомогательная функция. База данных :: connect (), File :: create ().

Что такое лучшая практика?

Ответы [ 2 ]

1 голос
/ 03 мая 2010

IMO, это зависит от типа вспомогательной функции. Statics / Singletons очень усложняют тестирование, поскольку они распространяют конкретные зависимости. Так что, если вспомогательный метод - это то, что я мог бы подделать в модульном тесте (и ваши примеры создания файлов и подключения к базам данных определенно подпадают под эту категорию), то я бы просто создал их как методы экземпляра для обычного класса. Пользователь будет создавать экземпляр вспомогательного класса по мере необходимости для вызова методов.

Имея это в виду, проще использовать шаблоны Inversion of Control / Dependency Injection / Service Locator для подделки, когда вы хотите протестировать код и хотите имитировать доступ к базе данных или доступ к файловой системе и т. Д.

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

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

0 голосов
/ 03 мая 2010

Синглтон решает путаницу.

MyHelper.Instance.ExecuteMethod();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...