Организация методов расширения [закрыто]
-
01-07-2019 - |
Вопрос
Как вы организуете свои Методы расширения?Скажем, если бы у меня были расширения для класса object и класса string, у меня возникло бы желание разделить эти методы расширения на классы, Т.е.:
public class ObjectExtensions
{
...
}
public class StringExtensions
{
...
}
я слишком все усложняю или в этом есть смысл?
Решение
Я организую методы расширения, используя комбинацию пространства имен и имени класса, и это похоже на то, как вы описали в вопросе.
Как правило, у меня есть своего рода "первичная сборка" в моем решении, которая обеспечивает большую часть общей функциональности (например, методы расширения).Для удобства обсуждения мы назовем эту сборку "Фреймворк".
В рамках сборки фреймворка я пытаюсь имитировать пространства имен объектов, для которых у меня есть методы расширения.Например, если я расширяю System.Web.HttpApplication, у меня будет пространство имен "Framework.Web".Такие классы, как "String" и "Object", находящиеся в пространстве имен "System", преобразуются в корневое пространство имен "Framework" в этой сборке.
Наконец, именование происходит в соответствии с тем, что вы указали в вопросе - имя типа с "Расширениями" в качестве суффикса.Это дает иерархию классов, подобную этой:
- Фреймворк (пространство имен)
- Фреймворк.ObjectExtensions (класс)
- Фреймворк.StringExtensions (класс)
- Фреймворк.Веб (пространство имен)
- Framework.Web.HttpApplicationExtensions (класс)
Преимущество заключается в том, что с точки зрения обслуживания, позже действительно легко найти методы расширения для данного типа.
Другие советы
Есть два способа организации методов расширения, которые я использую,
1) Если расширение специфично для проекта, над которым я работаю, то я сохраняю его в том же проекте / сборке, но в его собственном пространстве имен.
2) Если расширение такого рода, что я могу использовать его и в других проектах, то я разделяю их в общей сборке для расширений.
Самое важное, что нужно иметь в виду, - это в какой области я буду их использовать?Организовать их несложно, если я просто буду помнить об этом.