2014-10-11 3 views
0

У меня есть проект VSTO (Excel), написанный на C#. Три вопроса:Как структурировать классы в C#-программе

  1. У меня есть много переменных, которые заполняются один раз, а затем широко используются во всем проекте. Поэтому я создал публичный статический класс, который я назвал «Omni» - поскольку это и описательно, и коротко. Что-то вроде этого рекомендуется?

  2. Я поместил общие функции в открытый статический класс, который я назвал «Утилиты». Затем я использовал ключевое слово «this» в качестве первого параметра, создавая их методы расширения. Затем их можно получить из любого места - без использования «Утилиты». префикс (хотя я не совсем уверен, почему). Тот же вопрос: это предпочтительный способ сделать это?

  3. Наконец, у меня есть общие «подпрограммы», т. Е. Общедоступные методы void. Таким образом, параметры передаются и обрабатываются, но ничего не возвращается. Должен ли такой общий код просто перейти в свой собственный общедоступный статический класс, а затем получить вызов с именем класса в качестве префикса? Если да, существует ли какое-либо соглашение относительно того, каким будет имя класса?

Я понимаю, что это вопросы типа новичка (и я искал какое-то время!). Благодарю.

ответ

0

Что касается ваших точек

У меня есть много переменных, которые населены один раз, а затем ссылки широко на протяжении всего проекта. Поэтому я создал публичный статический класс , который я назвал «Omni», поскольку он является описательным и коротким. Есть что-то вроде этого рекомендуемый подход?

Да, обычно используется централизация, например, строковые константы, которые часто используются .

Если у вас их больше, я бы начал структурировать их для разных классов .

Если вы хотите, чтобы это было гибким и, например, имеют случаи, когда есть сопоставления между константами, например Green = 1, я бы переместился на некоторую технологию вычисления количества. Подробнее об этой идее можно найти in this article

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

Я поместил общие функции в открытый статический класс, который я назвал «Утилиты». Затем я использовал ключевое слово «this» в качестве первого параметра, , создавая их методы расширения. Затем их можно получить от в любом месте - без использования «Утилиты». префикс (хотя я не точно уверен, почему). Тот же вопрос: это предпочтительный способ сделать ?

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

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

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

В объектно-ориентированном коде код распространяется вблизи объектов, которые он работает с. Если вы сильно зависеть от кода, который находится в статических классах, возможно, там что-то не так. У ваших статических классов есть члены? Разделяют ли они некоторые знания между различными вызовами ваших статических классов?

+0

Re мой первый пункт, мой Omni класс **. ** включая любые перечисления. Большинство хранящихся там значений получены из внешних источников данных (например, списка кодов продуктов). – COG

+0

Re мой первый пункт, мой класс Omni ** ** включает любые перечисления. Однако почти все сохраненные там значения получены из внешних источников данных (например, списка кодов продуктов). Повторяю мой второй пункт, они обычно ** не ** конверсии. Примером может служить открытый статический метод bool, называемый IsInCollection. Параметры, переданные в, представляют собой коллекцию и элемент. Метод возвращает, является ли данный элемент в данной коллекции. Если не обрабатывается как метод расширения, каков рекомендуемый способ сделать это? Отдельный ответ, чтобы следовать моему третьему вопросу (!) – COG

+0

Re 3-й элемент, поскольку он по существу является приложением Excel, классы соответствуют листам Excel. Внутри нескольких я их у меня есть общий код, который нужно запустить. Но, конечно, я только хочу, чтобы он появился в одном месте. Например, на нескольких листах у меня есть данные, возвращаемые из SQL-запроса, которые должны заполнять лист, а затем анализироваться, форматироваться и т. Д. И код является общим - учитывая блок возвращаемых данных, имя листа и верхний левый ячейку диапазона, где данные должны быть вставлены. – COG

Смежные вопросы