Структура консольного приложения - PullRequest
4 голосов
/ 07 января 2011

За последние 6 месяцев я написал несколько консольных приложений .Net, и у нас есть еще много разных проектов в нашей организации.Я обычно придерживаюсь того же стандартного формата / структуры для моих консольных приложений.К сожалению, многие из наших консольных приложений этого не делают.

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

Может кто-нибудь предложить лучшие практики для решения этих проблем?Я читал эту статью MSDN о Консольных приложениях в .Net , в которой предлагается шаблон проектирования для консольных приложений.В примере используется шаблонный метод для решения некоторых проблем, которые я перечислил ранее.

В статье перечислены два недостатка использования этого подхода.

  • В итоге вдвое большеклассы
  • Наличие множества простых, похожих классов

Кто-нибудь может предложить лучшие или более стандартные способы решения этой проблемы?Как насчет перечисления дополнительных негативов с этим подходом?

Ответы [ 2 ]

2 голосов
/ 25 января 2011

Чтобы ответить на часть моего собственного вопроса ...

Я потратил довольно много времени в поисках стандартного способа обработки синтаксического анализа аргументов, передаваемых моим консольным приложениям.Я специально искал что-то похожее на GetOpt для Python.Имея это в виду, решение, на котором я остановился, - NDesk.Options .Он покрывает все наши потребности и, кажется, обрабатывает аргументы стандартным образом.Я подумал, что это может помочь кому-то, кто наткнется на этот вопрос в своих поисках.

0 голосов
/ 07 января 2011

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

...