Вопрос

Как вы организуете свои Методы расширения?Скажем, если бы у меня были расширения для класса object и класса string, у меня возникло бы желание разделить эти методы расширения на классы, Т.е.:

public class ObjectExtensions
{
    ...
}

public class StringExtensions
{
    ...
}

я слишком все усложняю или в этом есть смысл?

Это было полезно?

Решение

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

Как правило, у меня есть своего рода "первичная сборка" в моем решении, которая обеспечивает большую часть общей функциональности (например, методы расширения).Для удобства обсуждения мы назовем эту сборку "Фреймворк".

В рамках сборки фреймворка я пытаюсь имитировать пространства имен объектов, для которых у меня есть методы расширения.Например, если я расширяю System.Web.HttpApplication, у меня будет пространство имен "Framework.Web".Такие классы, как "String" и "Object", находящиеся в пространстве имен "System", преобразуются в корневое пространство имен "Framework" в этой сборке.

Наконец, именование происходит в соответствии с тем, что вы указали в вопросе - имя типа с "Расширениями" в качестве суффикса.Это дает иерархию классов, подобную этой:

  • Фреймворк (пространство имен)
    • Фреймворк.ObjectExtensions (класс)
    • Фреймворк.StringExtensions (класс)
    • Фреймворк.Веб (пространство имен)
      • Framework.Web.HttpApplicationExtensions (класс)

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

Другие советы

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

1) Если расширение специфично для проекта, над которым я работаю, то я сохраняю его в том же проекте / сборке, но в его собственном пространстве имен.

2) Если расширение такого рода, что я могу использовать его и в других проектах, то я разделяю их в общей сборке для расширений.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top