Я думаю, что понимаю тебя. Что бы я сделал, это:
Создайте 1 класс для обработки потока управления рендерингом:
class Renderer
{
Tenant _tenant;
void Render(ContentType type)
{
switch (type)
{
case ContentType.JSON:
_tenant.RenderJSON();
break;
default:
_tenant.RenderHTML();
break;
}
}
}
Затем создайте 1 суперкласс для Арендатора:
class Tenant
{
virtual void RenderJSON() { ... };
virtual void RenderHTML() { ... };
}
Наконец, создайте подклассы для конкретного арендатора:
class JoeBlow : Tenant
{
override void RenderJSON() { // joe blow's json };
}
Это должно оставить вас с хорошей моделью:
- 1 класс на одного арендатора (что приятно, поскольку вы говорите, что поведение меняется на каждого арендатора)
- 1 суперкласс для определения общего поведения (для всех жильцов)
- 1 место, где ваш contentType разрешается методом рендеринга.
Добавить новый тип контента очень просто: просто обновите переключатель (1). При необходимости вы можете добавить новый метод в суперкласс и добавить специфичную для арендатора обработку нового типа контента в подклассы.
Добавить нового арендатора тоже легко. Просто подкласс их.
Можно иметь переключатели, но если вы повторяете их, что-то не так, imo.