Где разместить уникальные настройки при использовании абстрактного базового класса - PullRequest
1 голос
/ 08 июня 2009

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

Базовый проект - это абстрактный класс, содержащий абстрактные методы, которые реализует каждый системный проект приложения.
Дело в том, что проекты системных приложений могут / будут иметь специфичные для клиента настройки, и я не хочу помещать этот код в сборку системных приложений.

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

Идея состоит в том, чтобы иметь один базовый проект (dll), один проект системного приложения для каждой системы (dll) и затем вносить специфические для клиента корректировки в один уникальный проект клиента (dll).
Rob.Core.dll
Rob.Application.BigSystem.dll
Rob.Application.BigSystem.Customer.BigCompany.dll

Rob.Core.dll - базовый абстрактный проект.
Rob.Application.BigSystem.dll является системным проектом ( BigSystem ) и происходит от Rob.Core.dll .
Rob.Application.BigSystem.dll должен проверить, есть ли у текущего клиента, BigCompany , какие-либо уникальные настройки и, если это так, загрузить Rob.Application.BigSystem. Customer.BigCompany.dll сборка, которая может содержать переопределения методов или расширений объектов, дополнительные поля и т. Д.

Что ж, пора подвести итоги ...
Я не уверен, каким путем идти сюда, я мог бы создать один базовый проект (абстрактный), и из каждого системного конкретного проекта вытекает из этого, кажется, это способ начать.
Затем создайте новый проект для каждого клиента, который имеет набор уникальных настроек и просто переопределите все методы в конкретном проекте системы.
Тогда проблема в том, какой проект выполняется во время выполнения? Системный проект или уникальный проект заказчика?
Если системный проект выполняется, как он должен загружать все корректировки клиента (если они есть, не каждый клиент получил уникальные корректировки)?

Это довольно большой вопрос, но я надеюсь на некоторые советы, которые помогут мне написать архитектуру.

С наилучшими пожеланиями
Роберт

1 Ответ

1 голос
/ 08 июня 2009

Мои два предложения, из того, что вы сказали:

Я бы сосредоточился на типах, а не на проектах. «Проекты» - это просто способ создать сборку, полную пригодных для использования типов - они сами по себе ничего не наследуют, не позволяют создавать подклассы и т. Д. Вопросы, которые я хотел бы задать: какие типы должны быть настроенным для клиента? Как будет проходить эта настройка?

После того, как вы это выясните, я бы посоветовал изучить внедрение зависимости или расширяемость. Хороший DI-фреймворк - Ninject . Хорошая расширяемая структура - MEF .

Если типы всегда необходимо указывать в соответствии с требованиями клиента, то, возможно, вы захотите сосредоточиться на DI. Если типы являются чем-то, что будет необязательным расширением поведения по умолчанию, то просто выполнить какую-либо форму системы плагинов / системы расширяемости, такой как MEF, может быть проще.

...