Похоже, SoftwareComponent - это доменный объект - объект, который описывает «вещь» в мире, в котором говорит ваше приложение.
Я стараюсь избегать зависимости этих объектов домена от чего-либо за пределами домена - это может быть более низкий уровень (как он хранится? Сериализуется ли он? Хранится в базе данных) или на уровне пользовательского интерфейса.
Я согласен, что это трудно сделать, довольно часто вы получаете отдельные иерархии классов для управления - классы пользовательского интерфейса, отображения баз данных и так далее. Поэтому, в зависимости от размера создаваемого объекта, стоит компенсировать включение пользовательского интерфейса или кода базы данных в объекты домена или не допускать их.
Для конкретной проблемы вы должны взглянуть на методы расширения C # 3.5. Они - ловкость рук в создании статических методов, которые выглядят так, как будто они определены в классе - если они не имеют доступа к частным / защищенным вещам (они могут получить доступ к общедоступным методам, как любой другой метод), вы можете обойтись без них , Я использую их для тех вещей, которые вы хотите сделать («методы» UI-уровня для объектов домена), которые определены в других местах.
Но имейте в виду, что методы расширения являются не чем иным, как синтаксическим сахаром для вас старых добрых статических методов в статическом классе.